2013-10-04 50 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

相關問題