CMake link a library (.a/.so)
CMake link a library (.a/.so)
我有以下项目文件结构:
libs/
└──FreeImage/
├── FreeImage.dll
├── FreeImage.h
├── FreeImage.lib
├── license-fi.txt
├── license-gplv2.txt
└── license-gplv3.txt
main.cpp
CMakeLists.txt
我的CMakeLists.txt
:
cmake_minimum_required(VERSION 2.8.4)
project(untitled)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY libs/FreeImage)
find_path(FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY FreeImage.h)
find_library(FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY freeimage)
include_directories(${FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY})
set(SOURCE_FILES main.cpp)
add_executable(main ${SOURCE_FILES})
target_link_libraries(main freeimage)
我按照这个写了我的CMakeLists.txt
,但它对我不起作用。
输出:
/home/username/main_ssd/soft/linux/portable/clion-140.569.17/bin/cmake/bin/cmake --build /home/username/.clion10/system/cmake/generated/70336599/70336599/Debug --target main -- -j 4
-- Configuring done
-- Generating done
-- Build files have been written to: /home/username/.clion10/system/cmake/generated/70336599/70336599/Debug
Scanning dependencies of target main
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
/usr/bin/ld: cannot find -lfreeimage
collect2: error: ld returned 1 exit status
CMakeFiles/main.dir/build.make:85: recipe for target 'main' failed
make[3]: *** [main] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/main.dir/all' failed
make[2]: *** [CMakeFiles/main.dir/all] Error 2
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/main.dir/rule' failed
make[1]: *** [CMakeFiles/main.dir/rule] Error 2
Makefile:160: recipe for target 'main' failed
make: *** [main] Error 2
> set(FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY libs/FreeImage)
变量FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY
设置为 libs/FreeImage
find_path(FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY FreeImage.h)
变量 FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY
设置为包含命名文件FreeImage.h
的目录。不存在命令的提示,因为缺少可选参数 PATH 或 HINT
find_library(FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY freeimage)
变量 FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY
设置为库FreeImage
的完整路径(如果找到)。不存在命令的提示,因为缺少可选参数 PATH 或 HINT
include_directories(${FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY})
变量FREEIMAGE_LIBRARY_AND_HEADER_DIRRECTORY
包含库FreeImage
的完整路径(如果找到)。
target_link_libraries(main freeimage)
CMakeList 中不存在名称freeimage
的目标.txt因此被解释为要链接-lfreeimage
问:你为什么尝试在Linux上使用"dll"?
我已经下载了新版本的FreeImage库(从这里)并按照以下说明编译它:
Compiling FreeImagePlus
-----------------------
FreeImagePlus is a C++ wrapper for FreeImage.
To compile FreeImage as a C++ library, follow these steps :
1) Enter the FreeImage directory
2) Build the distribution :
make -f Makefile.fip
make -f Makefile.fip install
3) Clean all files produced during the build process
make -f Makefile.fip clean
所以我有以下库的文件结构:
libs/FreeImage/
├── FreeImage.h
├── FreeImagePlus.h
├── libfreeimageplus-3.16.0.so
├── libfreeimageplus.a
├── license-fi.txt
├── license-gplv2.txt
└── license-gplv3.txt
然后我修改了我的CMakeLists.txt如下所示:
cmake_minimum_required(VERSION 2.8.4)
project(untitled)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_path(SIFTGPU_INCLUDE_DIR FreeImage.h)
find_library(SIFTGPU_LIBRARY libfreeimageplus)
include_directories(${SIFTGPU_INCLUDE_DIR})
add_executable(main ${SOURCE_FILES})
target_link_libraries(main freeimageplus)
彼得为你指出了正确的方向:
target_link_libraries(main freeimage)
应替换为:
target_link_libraries(main ${freeimage})
其中${freeimage}
是包含要链接到的库路径值的变量,使用 find_library
检索。
希望对您有所帮助。
- 如何使用ndk-build.cmd构建Android.so文件
- Boost Graph Library,修复节点大小
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- SFML library: http request
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- CLANG格式在缺少libtinfo.so.5库中不起作用
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 使 ld 忽略来自 /etc/ld.so.conf 的目录
- N-API include an .so or dll
- Linking library C++
- 加载共享库时C++错误:libopencv_ximgproc.so.4.4
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 用于构建 cuda .so 文件(共享库)的生成文件
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- CMake link a library (.a/.so)
- ltrace:在"library.so"中找不到 .dynsym 或 .dynstr
- QT QLibrary "Cannot load library *.so: (*.so: undefined symbol: staticMetaObject)"