Я пытаюсь скомпилировать простую программу 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? Большое спасибо! Ibraheem
Возможно, вы также забыли добавить препроцессор. Проверьте это с помощью подробного запуска cmake/make, чтобы увидеть фактические вызовы компилятора. Для указания определений вам понадобится ['target_compile_definitions()'] (https://cmake.org/cmake/help/v3.5/command/target_compile_definitions.html). –
Еще раз спасибо. target_compile_definitions() нуждается в микросах. Вместо этого я использовал TARGET_COMPILE_OPTIONS (ex01 PUBLIC -lXcursor -lXfixes -lXinerama -lpthread -ldl -lm -lX11) , но все равно получал ту же ошибку – Ibraheem
'target_compile_definitions' и' target_compile_options' - это две совершенно разные вещи. Я обновляю свой ответ. Все эти '-l ...', которые вы вручную добавляете, уже должны покрываться '$ {FLTK_LIBRARIES}' и '$ {OPENGL_LIBRARIES}'. –