LINUX.ORG.RU

Граждане и гражданки ЛОР, кто знаком с таким выхлопом от make

 , , ,


0

1
$ sudo make -f ccx_Makefile > temp.txt
/usr/bin/ld: ccx_2.11.a(dgesv.o): undefined reference to symbol 'xerbla_'
//usr/lib/x86_64-linux-gnu/liblapack.so.3: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [ccx_2.11] Error 1

Как это можно обрулить?

monk Zubok no-such-file



Последнее исправление: saufesma (всего исправлений: 1)

может нужная библиотека отсутствует или версия несовместимая

IvanRia
()
Ответ на: комментарий от beginnerSHA
MY_INCLUDE = /usr/include
MY_LIB = /usr/lib
CFLAGS = -w -O3 -L $(MY_LIB) -I $(MY_INCLUDE) -DARCH="Linux" -DMATRIXSTORAGE -lm -lc -lpthread -ldl
FFLAGS = -w -O3 -fopenmp -m64 $(OPTIONS)
LIBS = 

# Spooles
CFLAGS += -I $(MY_INCLUDE)/spooles -DSPOOLES
LIBS += $(MY_LIB)/x86_64-linux-gnu/libspooles.so

# Multithreaded spooles
# CFLAGS += -DUSE_MT
# LIBS += $(MY_LIB)/spoolesMT.a

# ARPACK
LIBS += /usr/local/lib/libarpack.so
CFLAGS += -DARPACK

CC=gcc
FC=gfortran

OPTIONS = -w -fno-second-underscore -fcray-pointer -x f77-cpp-input
FPPSTOP=-x none

.SUFFIXES: .o .c .cu
.c.o :
	$(CC) $(CFLAGS) -c $<
.f.o :
	$(FC) $(FFLAGS) -c $<

include Makefile.inc

SCCXMAIN = ccx_2.11.c

# OCCXCU = $(SCCXCU:.cu=.o)
OCCXF = $(SCCXF:.f=.o)
OCCXC = $(SCCXC:.c=.o)
OCCXMAIN = $(SCCXMAIN:.c=.o)

ccx_2.11: $(OCCXMAIN) ccx_2.11.a \
    ./date.pl; $(CC) $(CFLAGS) -c ccx_2.11.c; \
    $(FC) $(FFLAGS) -o $@ $(FPPSTOP) $(OCCXMAIN) ccx_2.11.a \
    -Wl,--start-group \
	$(LIBS) \
    -Wl,--end-group

ccx_2.11.a: $(OCCXCU) $(OCCXF) $(OCCXC)
	ar vr $@ $?

saufesma
() автор топика
Ответ на: комментарий от beginnerSHA

Забыла написать, что сюда еще название библиотеки подцепить надо

Я не спорю, куда цеплять и какую я не пойму.

saufesma
() автор топика
Ответ на: комментарий от timdorohin
pkg-config --libs lapack
-llapack

pkg-config --print-requires --print-requires-private lapack
blas
pkg-config --libs $(pkg-config --print-requires --print-requires-private lapack)
-lblas
CFLAGS = -w -O3 -L $(MY_LIB) -I $(MY_INCLUDE) -DARCH="Linux" -DMATRIXSTORAGE -lm -lc -lpthread -ldl -llapack -lblas

результат тот же

Makefile

# ARPACK
LIBS += /usr/local/lib/libarpack.so == с такой строкой
CFLAGS += -DARPACK


sudo make -f ccx_Makefile > temp.txt
/usr/bin/ld: ccx_2.11.a(dgesv.o): undefined reference to symbol 'xerbla_'
//usr/lib/x86_64-linux-gnu/liblapack.so.3: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [ccx_2.11] Error 1
Makefile
# ARPACK
LIBS += $(MY_LIB)/x86_64-linux-gnu/lapack/liblapack.so = поменял
CFLAGS += -DARPACK

sudo make -f ccx_Makefile > temp.txt
ccx_2.11.a(arpack.o): In function `arpack':
arpack.c:(.text+0x1a92): undefined reference to `dsaupd_'
arpack.c:(.text+0x1cd4): undefined reference to `dsaupd_'
arpack.c:(.text+0x2948): undefined reference to `dnaupd_'
arpack.c:(.text+0x2aec): undefined reference to `dseupd_'
arpack.c:(.text+0x465a): undefined reference to `dneupd_'
arpack.c:(.text+0x4940): undefined reference to `dnaupd_'
ccx_2.11.a(arpackbu.o): In function `arpackbu':
arpackbu.c:(.text+0x21c1): undefined reference to `dsaupd_'
arpackbu.c:(.text+0x22b7): undefined reference to `dsaupd_'
arpackbu.c:(.text+0x2b22): undefined reference to `dseupd_'
ccx_2.11.a(arpackcs.o): In function `arpackcs':
arpackcs.c:(.text+0x1f4c): undefined reference to `dsaupd_'
arpackcs.c:(.text+0x20a3): undefined reference to `dsaupd_'
arpackcs.c:(.text+0x22eb): undefined reference to `dnaupd_'
arpackcs.c:(.text+0x2cdb): undefined reference to `dseupd_'
arpackcs.c:(.text+0xf5b4): undefined reference to `dneupd_'
arpackcs.c:(.text+0xf9f0): undefined reference to `dnaupd_'
collect2: error: ld returned 1 exit status
make: *** [ccx_2.11] Error 1

и вот ещё

pkg-config --libs arpack
-L/usr/local/lib -larpack
добавил такую строку -L/usr/local/lib -larpack
CFLAGS = -w -O3 -L $(MY_LIB) -I $(MY_INCLUDE) -DARCH="Linux" -DMATRIXSTORAGE -lm -lc -lpthread -ldl -llapack -lblas -L/usr/local/lib -larpack

выхлоп тот же

sudo make -f ccx_Makefile > temp.txt
/usr/bin/ld: ccx_2.11.a(dgesv.o): undefined reference to symbol 'xerbla_'
//usr/lib/x86_64-linux-gnu/liblapack.so.3: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [ccx_2.11] Error 1

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 4)

find /usr/local/lib -name '*.so*' -exec nm --print-file-name --defined-only --dynamic {} \; | grep "xerbla_"

Это должно перебрать все библиотеки в /usr/local/lib.

Если ничего не найдёт можно и /usr/lib проверить потом.

Но похоже что при компиле xerbla_ была выпилена, вероятно потому что BLAS не системный, а собранный в составе чего-то (обычно это дело загребущих лап тулчейна R)

timdorohin ★★★★
()
Ответ на: комментарий от timdorohin

Но похоже что при компиле xerbla_ была выпилена, вероятно потому что BLAS не системный, а собранный в составе чего-то (обычно это дело загребущих лап тулчейна R)

А если это так то, что делать?

>find /usr/local/lib -name '*.so*' -exec nm --print-file-name --defined-only --dynamic {} \; | grep "xerbla_"

очень быстро срабатывает и ничего не находит.

$:sudo find /usr/lib -name '*.so*' -exec nm --print-file-name --defined-only --dynamic {} \; | grep "xerbla_"

nm: /usr/lib/libreoffice/share/palette/freecolour-hlc.soc: File format not recognized
..............................
/usr/lib/x86_64-linux-gnu/liblapack.so:00000000004675c0 T xerbla_
/usr/lib/x86_64-linux-gnu/liblapack.so:0000000000467670 T xerbla_array_
/usr/lib/x86_64-linux-gnu/libblas.so.3:0000000000049a20 T xerbla_
/usr/lib/x86_64-linux-gnu/libblas.so.3:0000000000049b00 T xerbla_array_
/usr/lib/x86_64-linux-gnu/liblapack.so.3:00000000004675c0 T xerbla_
/usr/lib/x86_64-linux-gnu/liblapack.so.3:0000000000467670 T xerbla_array_
nm: /usr/lib/x86_64-linux-gnu/libpthread.so: File format not recognized
/usr/lib/x86_64-linux-gnu/blas/libblas.so.3:0000000000049a20 T xerbla_
/usr/lib/x86_64-linux-gnu/blas/libblas.so.3:0000000000049b00 T xerbla_array_
/usr/lib/x86_64-linux-gnu/blas/libblas.so:0000000000049a20 T xerbla_
/usr/lib/x86_64-linux-gnu/blas/libblas.so:0000000000049b00 T xerbla_array_
/usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1:0000000000049a20 T xerbla_
/usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1:0000000000049b00 T xerbla_array_
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so:00000000004675c0 T xerbla_
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so:0000000000467670 T xerbla_array_
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3:00000000004675c0 T xerbla_
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3:0000000000467670 T xerbla_array_
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1:00000000004675c0 T xerbla_
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1:0000000000467670 T xerbla_array_
nm: /usr/lib/x86_64-linux-gnu/libm.so: File format not recognized
nm: /usr/lib/x86_64-linux-gnu/libc.so: File format not recognized
/usr/lib/x86_64-linux-gnu/libblas.so:0000000000049a20 T xerbla_
/usr/lib/x86_64-linux-gnu/libblas.so:0000000000049b00 T xerbla_array_
..........................................
nm: /usr/lib/debug/usr/lib/xviewer/libxviewer.so: no symbols
nm: /usr/lib/systemd/user/dbus.socket: File format not recognized
nm: /usr/lib/systemd/user/gpg-agent-ssh.socket: File format not recognized
nm: /usr/lib/systemd/user/gpg-agent-browser.socket: File format not recognized
nm: /usr/lib/systemd/user/sockets.target.wants/dbus.socket: File format not recognized
nm: /usr/lib/systemd/user/sockets.target.wants/gpg-agent-ssh.socket: File format not recognized
nm: /usr/lib/systemd/user/sockets.target.wants/gpg-agent-browser.socket: File format not recognized
nm: /usr/lib/systemd/user/sockets.target.wants/gpg-agent-extra.socket: File format not recognized
nm: /usr/lib/systemd/user/sockets.target.wants/gpg-agent.socket: File format not recognized
nm: /usr/lib/systemd/user/sockets.target.wants/dirmngr.socket: File format not recognized
nm: /usr/lib/systemd/user/gpg-agent-extra.socket: File format not recognized
nm: /usr/lib/systemd/user/gpg-agent.socket: File format not recognized
nm: /usr/lib/systemd/user/pulseaudio.socket: File format not recognized
nm: /usr/lib/systemd/user/dirmngr.socket: File format not recognized
nm: '/usr/lib/jvm/java-11-openjdk-amd64/lib/libatk-wrapper.so': No such file

пришлось урезать выхлоп

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 2)
Ответ на: комментарий от timdorohin

А может так, только пока не пойму как применить

You should mention the library on the command line after the object files being compiled.

the linking is dependent on the order of modules. Symbols are first requested, and then linked in from a library that has them. So you have to specify modules that use libraries first, and libraries after them. Like this:

gcc x.o y.o z.o -la -lb -lc
Moreover, in case there's a circular dependency, you should specify the same library on the command line several times. So in case libb needs symbol from libc and libc needs symbol from libb, the command line should be:
gcc x.o y.o z.o -la -lb -lc -lb

https://stackoverflow.com/questions/19901934/libpthread-so-0-error-adding-sym...

saufesma
() автор топика
Ответ на: комментарий от timdorohin

Переделал таким манером

MY_INCLUDE = /usr/include
MY_LIB = /usr/lib/x86_64-linux-gnu
CFLAGS = -w -O3 -L $(MY_LIB) -I $(MY_INCLUDE) -DARCH="Linux" -DMATRIXSTORAGE 
FFLAGS = -w -O3 -fopenmp -m64 $(OPTIONS)

# You should mention the library on the command line after the object files being compiled. Что я и сделал

LIBS = -lm -lc -lpthread -ldl -L /usr/local/lib -larpack -lblas -llapack

Теперь собралось. А что собралось, пока не понял. Не пойму где исполняемый файл.

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 2)

А sudo нахрена?

luke ★★★★★
()
Ответ на: комментарий от saufesma

ccx_2.11

Отсюда ж ясно:

ccx_2.11: $(OCCXMAIN) ccx_2.11.a \
    ./date.pl; $(CC) $(CFLAGS) -c ccx_2.11.c; \
    $(FC) $(FFLAGS) -o $@ $(FPPSTOP) $(OCCXMAIN) ccx_2.11.a \

gfortran выплюнет эльфа в -o, а в -o $@, что раскроется в ccx_2.11

luke ★★★★★
()
Последнее исправление: luke (всего исправлений: 1)
Ответ на: комментарий от luke

Меня смутило

Could not display "/../../../../../ccx_2.11".
There is no application installed for shared library files.
Do you want to search for an application to open this file?

saufesma
() автор топика

Сокращенная версия выхлопа make

.............
Finished prerequisites of target file 'ccx_2.11'.
 Prerequisite 'ccx_2.11.o' is older than target 'ccx_2.11'.
 Prerequisite 'ccx_2.11.a' is older than target 'ccx_2.11'.
 Prerequisite 'date.pl' is older than target 'ccx_2.11'.
No need to remake target 'ccx_2.11'.
make: 'ccx_2.11' is up to date.
saufesma
() автор топика
Ответ на: комментарий от saufesma

Компилятор сам чмодит. sudo-то нафига?

У тебя . не в PATH, вот и не находит.

luke ★★★★★
()

Во-первых, это выхлоп не от make а от линкера. Во-вторых, ЕМНИП, это он научился понимать что при линковке используются символы из транзитивных зависимостей, которые явно не указаны, и просит их указать. Т.е. тут, вероятно, не хватает -llapack при линковке. В-третьих, не написать блин полную команду которая привела к этому выхлопу это верх ламерства. В-четвёртых, используй систему сборки а не make.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Да, я встречал таких, купит перфоратор и говорит что строитель и умно так говорит, только вот отверстие сверлит в стороне от марки и понять не может, почему так получается.

saufesma
() автор топика
Ответ на: комментарий от saufesma

.exe в имени файла не делают его portable executable.

luke ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.