2013-10-04 30 views
2

我已将该项目与ATLAS库-llapack -lf77blas -lcblas -latlas -lgfortran链接起来,并且可以成功编译。但是,当我使用ldd命令来查看依赖库,输出如下:为什么ldd在生成可执行文件时输出我链接的库?

[email protected]:~/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) 
    [email protected]:~/Desktop/qt_output$ 

为什么它不具备libatlas.so或libatlas.a?谢谢。

更新:

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 
+0

有两种可能性。这些库是静态链接的,或者在主程序上没有调用atlas函数。你能给我完整的链接命令吗? – ztik

+0

谢谢,ctheo。我把地图集与libatlas.a联系起来,所以我认为这是第一种可能性。我已经更新了完整的'CPPFLAGS'和'LDFAGS'参数的问题,请检查它。 – mining

+0

谢谢。请参阅下面的回复。 – ztik

回答

3

接头正在寻找在系统库路径和用户定义的路径(如/home/ubuntu/Documents/3rdparty/lib/.so文件。这些.so文件由-l参数定义。例如,-latlas对应于libatlas.so

如果没有找到libatlas.so文件,则链接程序将查找libatlas.a。该文件基本上是所有.o库文件的ar(存档)文件。 .a文件被视为与对象相同,并包含在可执行文件中。所以它们不会出现在ldd命令中。

如果您使用-static自变量与g++那么您强制链接器仅查找.a文件,然后ldd什么都不返回。

为了动态链接到libatlas.so你需要在/home/ubuntu/Documents/3rdparty/lib/加入这个文件。

+0

好吧,明白了。感谢您的详细解释。 – mining

相关问题