2013-10-04 9 views
2

프로젝트를 ATLAS 라이브러리 -llapack -lf77blas -lcblas -latlas -lgfortran에 연결 했으므로 성공적으로 컴파일 할 수 있습니다.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가 없습니다 : 나는 종속 라이브러리를 볼 수 ldd 명령을 사용할 때 다음과 같이 그러나, 출력은? 감사.

업데이트 :

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

두 가지 가능성이 있습니다. 이 라이브러리들은 정적으로 링크되거나 메인 프로그램에서 아틀라스 함수가 ​​호출되지 않습니다. 완전 연결 명령을 내줄 수 있니? – ztik

+0

고마워요, ctheo. 저는 아틀라스를 libatlas.a와 연결 시켰습니다. 그래서 이것이 첫 번째 가능성이라고 생각합니다. 전체'CPPFLAGS' 및'LDFAGS' 매개 변수에 대한 질문을 업데이트했습니다. 확인하십시오. – mining

+0

감사합니다. 내 대답은 아래를 참조하십시오. – ztik

답변

3

링커는 시스템 라이브러리 경로 및 사용자 정의 경로 (같은 /home/ubuntu/Documents/3rdparty/lib/)에서 .so 파일을 찾고 있습니다. 이 .so 파일은 -l 인수로 정의됩니다. 예를 들어 -latlaslibatlas.so에 해당합니다.

libatlas.so 파일이 없으면 링커에서 libatlas.a을 찾습니다. 이 파일은 기본적으로 모든 .o 라이브러리 파일의 ar (아카이브) 파일입니다. .a 파일은 개체와 동일하게 취급되며 실행 파일 내에 포함됩니다. 따라서 그들은 ldd 명령에 나타나지 않습니다.

당신은 다음 만에 .a 파일과 ldd 아무것도 반환을보고 링커를 강제 g++-static 인수를 사용하는 경우.

libatlas.so에 대한 동적 링크를 만들려면 /home/ubuntu/Documents/3rdparty/lib/에이 파일을 추가해야합니다.

+0

자, 알겠습니다. 자세한 설명을 해주셔서 감사합니다. – mining