我想編譯一個簡單的FLTK程序,但它總是會帶來鏈接錯誤。當我建立這個命令,它的工作原理fltk cmake ubuntu鏈接錯誤
g++ -I/usr/local/include \
-I/usr/include/freetype2 \
-D_LARGEFILE_SOURCE \
-D_LARGEFILE64_SOURCE \
-D_THREAD_SAFE \
-D_REENTRANT \
-o 'ex01' './ex01.cxx' /usr/local/lib/libfltk.a \
-lXcursor -lXfixes -lXext -lXft -lfontconfig \
-lXinerama -lpthread -ldl -lm -lX11
當我嘗試CMake的這些行:
CMAKE_MINIMUM_REQUIRED(VERSION 3.6.1)
PROJECT(ex01)
FIND_PACKAGE(FLTK REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
ADD_EXECUTABLE(ex01 ex01.cxx)
TARGET_INCLUDE_DIRECTORIES(ex01 PUBLIC ${FLTK_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(ex01 ${FLTK_LIBRARIES} ${OPENGL_LIBRARIES})
我得到這個錯誤:
[100%] Linking CXX executable ex01
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libfltk.a(Fl_x.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [ex01] Error 1
make[1]: *** [CMakeFiles/ex01.dir/all] Error 2
make: *** [all] Error 2
我的系統有Ubuntu的14和cmake的3.6.1。任何建議?有沒有辦法將以前的g ++選項添加到CMakeLists.txt文件中? 非常感謝! 易卜拉欣
您可能也忘記添加預處理器定義。通過詳細的cmake/make運行來查看實際的編譯器調用。您需要['target_compile_definitions()'](https://cmake.org/cmake/help/v3.5/command/target_compile_definitions.html)來指定定義。 –
再次感謝。 target_compile_definitions()需要micros。我使用了TARGET_COMPILE_OPTIONS(ex01 PUBLIC -lXcursor -lXfixes -lXext -lXft -lfontconfig -lXinerama -lpthread -ldl -lm -lX11) ,但仍然得到相同的錯誤 – Ibraheem
'target_compile_definitions'和'target_compile_options'是兩個完全不同的東西。我已經更新了我的答案。所有這些手動添加的'-l ...'應該已經被'$ {FLTK_LIBRARIES}'和'$ {OPENGL_LIBRARIES}'覆蓋。 –