2015-06-21 68 views
1

我是初学CMake,我会用它编译我的项目。 我有以下的CMakeLists.txt:如何使用共享库静态与cmake

cmake_minimum_required (VERSION 2.6) 
project (rt) 

include_directories ("${PROJECT_BINARY_DIR}/src/") 
include_directories ("${PROJECT_BINARY_DIR}/src/hook") 
include_directories ("${PROJECT_BINARY_DIR}/src/light") 
include_directories ("${PROJECT_BINARY_DIR}/src/move") 
include_directories ("${PROJECT_BINARY_DIR}/src/object/inter") 
include_directories ("${PROJECT_BINARY_DIR}/src/object/normal") 
include_directories ("${PROJECT_BINARY_DIR}/src/option") 
include_directories ("${PROJECT_BINARY_DIR}/src/parsing") 
include_directories ("${PROJECT_BINARY_DIR}/src/ray") 
include_directories ("${PROJECT_BINARY_DIR}/src/render") 
include_directories ("${PROJECT_BINARY_DIR}/src/shadow") 
include_directories ("${PROJECT_BINARY_DIR}/src/utils") 
include_directories ("${PROJECT_BINARY_DIR}/lib/minilibx") 

file(GLOB hook 
    "*.h" 
    "*.c" 
) 

file(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.c) 

#set (EXTRA_LIBS ${EXTRA_LIBS} ${X11_LIBRARIES} m) 

add_executable (rt ${SRC_FILES}) 
target_link_libraries (rt ${EXTRA_LIBS} X11 Xext m ${PROJECT_BINARY_DIR}/lib/libmlx.a) 

但是当我运行make,我的静态库minilibx将无法​​编译。但出错的是X11Xext库中的所有函数都未定义。

使VERBOSE = 1结果:

连接C可执行室温 的/ usr /斌/ cmake的-E cmake_link_script CMakeFiles/rt.dir/link.txt --verbose = 1 的/ usr/bin中/立方厘米CMakeFiles /rt.dir/src/move/translation.co CMakeFiles/rt.dir/src/move/rotation.co CMakeFiles/rt.dir/src/light/light.co CMakeFiles/rt.dir/src/option/option。 CMakeFiles/rt.dir/src/option/file_option.co CMakeFiles/rt.dir/src/render/render.co CMakeFiles/rt.dir/src/hook/control.co CMakeFiles/rt.dir/src/ray/eye.co CMakeFiles/rt.dir/src/ray/ray.co CMakeFiles/rt.dir/src/utils/my_strlen.co CMakeFiles/rt.dir/src/utils/my_strncpy.co CMakeFiles/rt.dir/src/object/inter/plan.co CMakeFiles/rt.dir/src/object/inter/cone.co CMakeFiles/rt.dir/src/object/in CMakeFiles/rt.dir/src/object/inter/sphere.co CMakeFiles/rt.dir/src/object/inter/tore.co CMakeFiles/rt.dir/src/object/normal/plan.co CMakeFiles/rt.dir/src/object/normal/cone.co CMakeFiles/rt.dir/src/object/normal/cylinder.co CMakeFiles/rt.dir/src/object/normal/sphere.co CMakeFiles/rt.dir /src/parsing/scene.co CMakeFiles/rt.dir/src/parsing/file_access.co CMakeFiles/rt.dir/src/parsing/str_tool.co CMakeFiles/rt.dir/src/shadow/shadow.co CMakeFiles/rt .DIR/SRC/main.co -o室温-rdynamic -lX11 -lXext -lm LIB/libmlx.a

,这是错误的一个例子:

LIB/libmlx.a(mlx_init.o) :在函数mlx_int_deal_shm'中: mlx_init.c :(.text + 0x2a):undefined reference toXShmQueryVersion' mlx_init.c :(文字+量0x104):未定义的引用`XShmPixmapFormat”

如何解决未定义引用错误?

回答

0

我已经解决了这个问题,libs的顺序不正确。

我只是将我的lib链接到另一个lib之前。等瞧:)

target_link_libraries (rt ${EXTRA_LIBS} ${PROJECT_BINARY_DIR}/lib/libmlx.a X11 Xext m)

0

CMake使用target_link_libraries来指定您链接的库。
在你的情况下,好像你正在链接到正确的库(target_link_libraries (rt ${EXTRA_LIBS} X11 Xext m ${PROJECT_BINARY_DIR}/lib/libmlx.a)),所以我敢打赌,他们没有找到。

尝试运行:
make VERBOSE=1

这会给你gcc的输出。粘贴它生成的最后几条gcc指令,我们将看到它为什么没有找到你的库。

+0

好,我编辑新信息的问题 –