2014-09-02 15 views
11

Tôi đang cố gắng để tạo ra một tập tin trong Ubuntu và khi tôi làm cho tôi tiếp tục nhận được lỗi này:tài liệu tham khảo không xác định đến biểu tượng 'pthread_key_delete @@ GLIBC_2.2.5

/usr/bin/ld: ../../gtest-1.7.0/libgtest.a(gtest-all.cc.o): undefined reference to symbol  '[email protected]@GLIBC_2.2.5' 
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 
make[2]: *** [src/tests/run_tests] Error 1 
make[1]: *** [src/tests/CMakeFiles/run_tests.dir/all] Error 2 
make: *** [all] Error 2 

tôi thấy một ai đó nhắc đến để đi vào Makefile và thêm '-L/lib64 -l pthread' vào biến LDFLAGS nhưng làm thế nào để bạn làm điều đó? Hoàn toàn mới để linux đây = X

+0

tôi nhìn thấy những điều tương tự, và sẽ đánh giá cao một CMake-orie câu trả lời nted. –

Trả lời

2

tôi nhấn cùng một vấn đề: -lpthread nên cuối cùng trong sự thỉnh nguyện liên kết của bạn (đã làm với sự pha trộn của tĩnh và biểu tượng chia sẻ)

Vì vậy, với CMake: ${CMAKE_THREAD_LIBS_INIT} nên Cuối cùng. Ví dụ:

target_link_libraries(mytestlib 
    ${BINARY_DIR}/libgmock.a 
    glog 
    gflags 
    ${Boost_LIBRARIES} 
    ${CMAKE_THREAD_LIBS_INIT} 
) 

Và đối với OP: Tìm kiếm "chủ đề" trong CMakeLists.txt cho dự án của bạn được xây dựng và dán những phần (hoặc liên kết mà dự án bạn đang cố gắng để xây dựng nếu nó là mã nguồn mở) - nếu trên không phải là tự giải thích

+1

Đây là một câu trả lời phù hợp đa nền tảng. Biên dịch trên Mac vs Linux có các yêu cầu khác nhau và điều này ngăn cản bất kỳ công cụ 'if (APPLE)' xấu xí nào. – David

15

trên đây liên kết vấn đề được giải quyết bằng cách thêm

-lpthread -lm to CMakeLists.txt (target link libraries for luxrender); 
TARGET_LINK_LIBRARIES(... -lpthread -lm) 

Trân trọng,

+1

Sự cố này có thể được giải quyết mà không cần sử dụng Makefile không? –

+0

Đã khắc phục sự cố cho tôi, biên soạn dự án nguồn mở trên cụm mà tôi không kiểm soát được môi trường. Chúc mừng. – domini1000

Các vấn đề liên quan