I'm이 openvswitch-1.5.0을 컴파일할 때 다음과 같은 컴파일 오류가 발생했습니다.
gcc -Wstrict-prototypes -Wall -Wno-sign-compare -Wpointer-arith
-Wdeclaration-after-statement -Wformat-security -Wswitch-enum -Wunused-parameter -Wstrict-aliasing -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -Wno-override-init -g -O2 -export-dynamic ***-lpthread*** -o utilities/ovs-dpctl utilities/ovs-dpctl.o lib/libopenvswitch.a
/home/jyyoo/src/dpdk/build/lib/librte_eal.a
/home/jyyoo/src/dpdk/build/lib/libethdev.a
/home/jyyoo/src/dpdk/build/lib/librte_cmdline.a
/home/jyyoo/src/dpdk/build/lib/librte_hash.a
/home/jyyoo/src/dpdk/build/lib/librte_lpm.a
/home/jyyoo/src/dpdk/build/lib/librte_mbuf.a
/home/jyyoo/src/dpdk/build/lib/librte_ring.a
/home/jyyoo/src/dpdk/build/lib/librte_mempool.a
/home/jyyoo/src/dpdk/build/lib/librte_malloc.a -lrt -lm
/usr/bin/ld: /home/jyyoo/src/dpdk/build/lib/librte_eal.a(eal.o): undefined reference
to symbol 'pthread_create@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from
command line
내가 립스레드라는 상징을 보려고 하면 괜찮아 보인다.
$ readelf -s /lib/x86_64-linux-gnu/libpthread.so.0 | grep pthread_create
199: 0000000000008220 2814 FUNC GLOBAL DEFAULT 13 pthread_create@@GLIBC_2.2.5
173: 0000000000008220 2814 FUNC LOCAL DEFAULT 13 __pthread_create_2_1
462: 0000000000008220 2814 FUNC GLOBAL DEFAULT 13 pthread_create@@GLIBC_2.2
힌트나 조언을 해주실 수 있나요?
컴파일 중인 개체 파일의 후 명령행에 라이브러리를 언급해야 합니다.
gcc -Wstrict-prototypes -Wall -Wno-sign-compare -Wpointer-arith -Wdeclaration-after-statement -Wformat-security -Wswitch-enum -Wunused-parameter -Wstrict-aliasing -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -Wno-override-init \
-g -O2 -export-dynamic -o utilities/ovs-dpctl utilities/ovs-dpctl.o \
lib/libopenvswitch.a \
/home/jyyoo/src/dpdk/build/lib/librte_eal.a /home/jyyoo/src/dpdk/build/lib/libethdev.a /home/jyyoo/src/dpdk/build/lib/librte_cmdline.a /home/jyyoo/src/dpdk/build/lib/librte_hash.a /home/jyyoo/src/dpdk/build/lib/librte_lpm.a /home/jyyoo/src/dpdk/build/lib/librte_mbuf.a /home/jyyoo/src/dpdk/build/lib/librte_ring.a /home/jyyoo/src/dpdk/build/lib/librte_mempool.a /home/jyyoo/src/dpdk/build/lib/librte_malloc.a \
-lrt -lm -lpthread
설명: 링크는 모듈의 순서에 따라 달라집니다. 기호는 먼저 요청되고 기호가 있는 라이브러리에서 연결됩니다. 그래서 당신은 라이브러리를 사용하는 모듈을 먼저 지정하고 그 다음에 라이브러리를 지정해야 합니다. 다음과 같습니다.
gcc x.o y.o z.o -la -lb -lc
또한 순환 종속성이 있는 경우 명령행에 동일한 라이브러리를 여러 번 지정해야 합니다. 따라서 'libb'는 'libc'의 기호가 필요하고 'libb'는 'libb'의 기호가 필요한 경우 명령행은 다음과 같아야 한다.
gcc x.o y.o z.o -la -lb -lc -lb
오류 메시지는 배포/컴파일러 버전에 따라 다릅니다.
우분투 사우시:
/usr/bin/ld: /mnt/root/ffmpeg-2.1.1//libavformat/libavformat.a(http.o): undefined reference to symbol 'inflateInit2_'
/lib/x86_64-linux-gnu/libz.so.1: error adding symbols: DSO missing from command line
Ubuntu Raring: (자세한 정보 제공)
/usr/bin/ld: note: 'uncompress' is defined in DSO /lib/x86_64-linux-gnu/libz.so.1 so try adding it to the linker command line
솔루션: 컴파일 단계, 링크 단계에서 라이브러리가 누락되었을 수 있습니다. 저 같은 경우에는 makefile / GCC 플래그에 '-lz'를 추가했습니다.
배경: DSO는 동적 공유 개체 또는 공유 라이브러리입니다.
그러므로 나는 정말 내가 찾은 다른 사건 모두 빗나갔다.
이것이 내가 했다.
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: eggtrayicon.o: undefined reference to symbol 'XFlush'
/usr/lib64/libX11.so.6: error adding symbols: DSO missing from command line
문제는 포함되지 않은 ' (libX11.so)' 를 추가해야 합니다 - 비록 명령줄이 lx11 종속 항목으로 않았기 때문에 gtk 및 gnome 인수만 도서관이 있다.
그래서, 이 메시지는 나를 위한 유일한 대한 것은 있을 수 있습니다, 하지만 didn& 도와 # 39, 제대로 안 된다. 이것은 아마도 단순하다. 제공하는 라이브러리 심볼에는 명령줄이 추가되도록 않았다.
Posix 에 대한 세 가지 중요한 규칙이 링크 참고:
나는 또한 동일한 문제가 발생했습니다. 내가 왜 내가 알지 못하는 ',' 옵션을 추가하기만 레프 트레더 컴파일러와의 and everything ok.
이전:
$ g++ -rdynamic -m64 -fPIE -pie -o /tmp/node/out/Release/mksnapshot ...*.o *.a -ldl -lrt
attaboy 정보정의다음 오류:. 만약 내가 '다음' 옵션을 덮어쓰기/추가 레프 트레더 그들위에 명령을 확인.
/usr/bin/ld: /tmp/node/out/Release/obj.host/v8_libbase/deps/v8/src/base/platform/condition-variable.o: undefined reference to symbol 'pthread_condattr_setclock@@GLIBC_2.3.3'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
이 '때' 라는 메시지가 DSO 누각되었습니다 명령줄에서는 표시할지를 링커 찾을 수 없는 필수 기호와 it& # 39 의 기호를 사용할 수 있지만 일반적인 검색 중 하나를 직접 지정되었습니까 종속도 한 동적 라이브러리.
과거 링커 (여호와) 로 지정된 종속물과의 언어를 사용할 수 있습니다. 그러나 일부 변경된 이후 버전 적용 링커 이제는 좀 더 엄격한 보기입니다 뭐한테 사용할 수 있습니다. 메시지 카타시안 고안되었습니다 이전됩니다 하는 데 도움이 될 것입니다.
What to do 가능*
방식으로 이 문제를 해결할 수 있다는 것을 확실히 하는 데 필요한 모든 라이브러리보다는 합니다 충족합니다 직접 필요한 기호는 에서 지정된 링커 명령줄입니다. 중요한 것은 오더할 사실도 유념해야 한다.
이 붙여넣습니다 투입할 수 있는 일반적인 방법에 있다 '' 또는 이와 유사한 두플라그스 구축하십시오 내보내기할 실행하기 전에 다음과 같은 구성 "'
가끔 반군지역 ',' 직접 '-';; - (wl) = " 두플라그스 copy-dt-needed-entries" 작동합니까 할 수도 있습니다.
내가 찾은 것은 문제가 있는 경우가 아닌 한 library*라는 링커 알려 줍니다. 영리한 방법이 있을 수 있지만 문제는 이게 어디 작동합니까 나는한다:
@peter 카라세프: 나는 동일한 문제가 전반에서 mgcc 4.8.2 cmake 프로젝트를 CentOS7. The order of the 도서관이 " target_link_libraries"; 섹선에서 중요하다. 난 그냥 있는 그대로 전달하는 것, 즉 cmake 목록에 대한 링커, t try and 작동합니까 아웃해야 doesn& # 39 올바른 순서. 이건 뭐, 그런 식으로 합리적인 상기하 cmake can& # 39 는 성공적으로 완료될 때까지 정확한 순서를 링크뿐 수 있을지 알 수 없다.