c++11 - 克里昂和 CMake。如何添加库 (*.so)

标签 c++11 cmake shared-libraries clion

我正在尝试在 Clion IDE 中编写 (c/c++) 代码。我需要在我的项目中添加一些共享库。此时,我只想运行 main 函数,它将添加我的外部库 libAPIenergy.so 拥有的所有函数。我从这个论坛尝试了一些解决方案,但没有一个有帮助。
下面我将介绍给我最少错误的解决方案。
在主要功能中,我包括

#include "APIenergy.h"
CMake 文件
cmake_minimum_required(VERSION 3.3)
project(TestProject)
add_library( libAPIenergy SHARED IMPORTED )
link_directories (/home/I/Lib/Linux/x86)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lAPIenergy ")
set(SOURCE_FILES main.cpp APIenergy.h)
add_executable(TestProject ${SOURCE_FILES})
和错误:
/home/I/clion-1.2/bin/cmake/bin/cmake --build /home/I/.CLion12/system/cmake/generated/9faec492/9faec492/Debug --target TestProject -- -j 8
[ 50%] Building CXX object CMakeFiles/TestProject.dir/main.cpp.o
[100%] Linking CXX executable TestProject
/usr/bin/ld: cannot find -lAPIenergy
collect2: error: ld returned 1 exit status
CMakeFiles/TestProject.dir/build.make:94${PROJECT_SOURCE_DIR}/P2PTunnelAPIs.h.in": polecenia dla obiektu 'TestProject' nie powiodły się
make[3]: *** [TestProject] Błąd 1
CMakeFiles/Makefile2:67: polecenia dla obiektu 'CMakeFiles/TestProject.dir/all' nie powiodły się
make[2]: *** [CMakeFiles/TestProject.dir/all] Błąd 2
CMakeFiles/Makefile2:79: polecenia dla obiektu 'CMakeFiles/TestProject.dir/rule' nie powiodły się
make[1]: *** [CMakeFiles/TestProject.dir/rule] Błąd 2
Makefile:118: polecenia dla obiektu 'TestProject' nie powiodły się
make: *** [TestProject] Błąd 2
我还添加到系统路径 LD_LIBRARY_PATH 与我的共享库的目录
export LD_LIBRARY_PATH=$HOME/Lib/Linux/x86
。::编辑::。 1
我的 CMake 在您的建议之后
cmake_minimum_required(VERSION 3.3)
project(TestProject)
add_library(libAPIenergy SHARED IMPORTED)
SET_PROPERTY(TARGET libAPIenergy PROPERTY IMPORTED_LOCATION /home/I/x86/libAPIenergy.so)
target_link_libraries(TestProject libAPIEnergy)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp APIenergy.h)
add_executable(TestProject ${SOURCE_FILES})
来自 CMake 的错误
Error:Cannot specify link libraries for target "TestProject" which is not built by this project.
还有一件重要的事情。我部署了 APIenergy.h 文件到项目的主目录。
.::编辑 2::.
cmake_minimum_required(VERSION 3.3)
project(TestProject)
add_library(libAPIenergy SHARED IMPORTED)

target_link_libraries(TestProject libAPIenergy)
SET_PROPERTY(TARGET libAPIenergy PROPERTY IMPORTED_LOCATION /home/I/lib/x86/libAPIenergy.so)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp APIenergy.h)

add_executable(TestProject ${SOURCE_FILES})
target_link_libraries(TestProject libAPIenergy)
错误
Error:Cannot specify link libraries for target "TestProject" which is not built by this project.
.::编辑 3::.
现在CMake文件没有错误
cmake_minimum_required(VERSION 3.3)
project(TestProject)
add_library(libAPIenergy SHARED IMPORTED)

SET_PROPERTY(TARGET libAPIenergy PROPERTY IMPORTED_LOCATION /home/I/lib/x86/libAPIenergy.so)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp APIenergy.h)

add_executable(TestProject ${SOURCE_FILES})
target_link_libraries(TestProject libAPIenergy)
和简单的代码,我尝试过午餐
#include <iostream>
#include "APIenergy.h" // include without error this mean without underlined

using namespace std;

int main() {

    int ret = APIenergyInitialize(5); // IDE suggestions name function so is looks good

    cout << "Hello, World!" << endl;
    return 0;
}
编译器错误
/home/I/clion-1.2/bin/cmake/bin/cmake --build /home/I/.CLion12/system/cmake/generated/9faec492/9faec492/Debug0 --target TestProject -- -j 8
[ 50%] Linking CXX executable TestProject
/home/I/lib/x86/libAPIenergy.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
CMakeFiles/TestProject.dir/build.make:95: polecenia dla obiektu 'TestProject' nie powiodły się
make[3]: *** [TestProject] Błąd 1
CMakeFiles/Makefile2:67: polecenia dla obiektu 'CMakeFiles/TestProject.dir/all' nie powiodły się
make[2]: *** [CMakeFiles/TestProject.dir/all] Błąd 2
CMakeFiles/Makefile2:79: polecenia dla obiektu 'CMakeFiles/TestProject.dir/rule' nie powiodły się
make[1]: *** [CMakeFiles/TestProject.dir/rule] Błąd 2
Makefile:118: polecenia dla obiektu 'TestProject' nie powiodły się
make: *** [TestProject] Błąd 2

最佳答案

使用 add_library如果您从源文件创建自己的库。

使用 target_link_libraries如果您指定您的目标需要链接到其他人的库。

关于c++11 - 克里昂和 CMake。如何添加库 (*.so),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33639775/

相关文章:

c++ - 为什么 C++11 constexpr 如此严格?

c++ - 如何安装与接口(interface)库私下链接的目标

cmake - 将列表转换为 cmake 函数的参数

c++ - 在 CMAKE 上链接和添加可执行文件?

c++ - 在共享库和 main 之间共享全局数据

c++ - 正确分配 vector 中的内存

C++模板重构/泛化

c++ - 使用 std::enable_if 的正确方法

visual-c++ - 使用 Conan 和 MSVC++ 的静态和动态库包

linux - 是否可以绕过已编译可执行文件所需的共享库依赖项?