Bli*_*use 5 c++ cmake cereal clion
*我知道有很多关于此的问题,但在谈论 CMake 时它们根本没有多大帮助,因此我决定提出这个问题*
因此,我正在研究 CLion,它使用 CMake 来导入并向编译器提供参数,并成功包含(导入)位于名为“ExternalLibraries”的文件夹中的外部库(cereal:将类序列化为 json 文件)我的项目文件夹的根目录。它工作得很好,直到我重新启动 IDE 并尝试再次运行代码...它返回了编译错误(我认为)。
我的 CMake 文件如下所示:
cmake_minimum_required(VERSION 3.3)
project(xMemory)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories ("${PROJECT_SOURCE_DIR}/ExternalLibraries/cereal-1.1.2/include/")
set(SOURCE_FILES main.cpp xObject.cpp xObject.h)
add_executable(xMemory ${SOURCE_FILES})
target_link_libraries (xMemory cereal)
Run Code Online (Sandbox Code Playgroud)
当我尝试运行/编译时,shell 给了我这个:
/home/lunaticsoul/Documents/clion-1.2.4/bin/cmake/bin/cmake --build /home/lunaticsoul/.CLion12/system/cmake/generated/95701c38/95701c38/Debug0 --target xMemory -- -j 4
Scanning dependencies of target xMemory
[ 33%] Building CXX object CMakeFiles/xMemory.dir/xObject.cpp.o
[ 66%] Building CXX object CMakeFiles/xMemory.dir/main.cpp.o
[100%] Linking CXX executable xMemory
/usr/bin/ld: cannot find -lcereal
collect2: error: ld returned 1 exit status
make[3]: *** [xMemory] Error 1
make[2]: *** [CMakeFiles/xMemory.dir/all] Error 2
make[1]: *** [CMakeFiles/xMemory.dir/rule] Error 2
make: *** [xMemory] Error 2
Run Code Online (Sandbox Code Playgroud)
我不确定发生了什么,因为库似乎实际上导入到代码中(包括谷物时没有红色字母),正如我之前所说,我认为它只是停止工作。
有人可以告诉我我的 CMake 文件是否有问题吗?
PD:这是一个屏幕截图,以防万一有人需要。
PD2:我正在使用基本操作系统:Freya(Ubuntu 14.04)
你应该使用
link_directories(directory1 directory2 ...)
Run Code Online (Sandbox Code Playgroud)
指令指定库目录。
https://cmake.org/cmake/help/v3.0/command/link_directories.html
如果添加以下内容,它会起作用:
target_link_libraries (xMemory /library_build_path/libcereal.a)
Run Code Online (Sandbox Code Playgroud)
细节:
ld 正在寻找定义在一个非常短的文件夹列表中的库
/etc/ld.so.conf
Run Code Online (Sandbox Code Playgroud)
它通常如下所示:
include /etc/ld.so.conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)
这些 *.conf 文件中的实际路径列表通常如下所示:
# Legacy biarch compatibility support
/lib32
/usr/lib32
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)
如果您的项目链接库不在该列表的文件夹中,ld 将找不到它,除非使用特殊链接变量设置LD_LIBRARY_PATH以及您的库的路径或在 cmake target_link_libraries指令中提供完整的路径/库名称。
有关如何正确设置 LD_LIBRARY_PATH 变量的详细信息在此讨论
归档时间: |
|
查看次数: |
29601 次 |
最近记录: |