问题
I have linked the project with ATLAS library, -llapack -lf77blas -lcblas -latlas -lgfortran
, and it could compile successfully. But when I use the ldd
command to view the dependency libraries, the output is as follows:
ubuntu@ubuntu-desktop:~/Desktop/qt_output$ldd test_atlas
linux-vdso.so.1 => (0x00007fffa99ff000)
libopencv_core.so.2.4 => /home/ubuntu/Documents/3rdparty/lib/libopencv_core.so.2.4 (0x00007fe0577d7000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007fe057477000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe057173000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe056e76000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe056c60000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe0568a1000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe056689000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe05646c000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe056264000)
libcudart.so.5.0 => /usr/local/cuda-5.0/lib64/libcudart.so.5.0 (0x00007fe056009000)
libnpp.so.5.0 => /usr/local/cuda-5.0/lib64/libnpp.so.5.0 (0x00007fe05051c000)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007fe0502e0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe057e31000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe0500db000)
ubuntu@ubuntu-desktop:~/Desktop/qt_output$
Why does not it have the libatlas.so or libatlas.a? Thanks.
UPDATED:
CFLAGS = -pipe -O2 -Wall -W $(DEFINES)
CXXFLAGS = -pipe -std=c++0x -O2 -Wall -W $(DEFINES)
INCPATH = -I../../QtSDK/Desktop/Qt/4.8.1/gcc/mkspecs/linux-g++ -I../../Documents/3rdparty/include -I../../Documents/3rdparty/include/opencv2 -I../../Documents/3rdparty/include/opencv -I/usr/local/MATLAB/R2013a/extern/include -I.
LINK = g++
LFLAGS = -Wl,-O1 -Wl,-rpath,/home/ubuntu/QtSDK/Desktop/Qt/4.8.1/gcc/lib
LIBS = $(SUBLIBS) -L/home/ubuntu/Documents/3rdparty/lib/ -lopencv_core -lopencv_imgproc -lopencv_highgui -llapack -lf77blas -lcblas -latlas -lgfortran
回答1:
The linker is looking for .so
files in the system library paths and user defined paths (like /home/ubuntu/Documents/3rdparty/lib/
). These .so
files are defined by -l
argument. For example the -latlas
corresponds to libatlas.so
.
If libatlas.so
file is not found then the linker will look for libatlas.a
. This file is basically an ar
(archive) file of all .o
library files. The .a
files are treated same as objects and are included inside the executable. So they do not appear in ldd
command.
If you use -static
argument with g++
then you force the linker to look only for .a
files and then ldd
returns nothing.
In order to make dynamic link to libatlas.so
you need to add this file in /home/ubuntu/Documents/3rdparty/lib/
.
来源:https://stackoverflow.com/questions/19171908/why-does-not-ldd-output-the-libraries-that-i-have-linked-when-generating-the-exe