Clion & CMake. How To Add Library (*.so)

匿名 (未验证) 提交于 2019-12-03 00:59:01

问题:

I trying write code (c/c++) in Clion IDE. I needs add to my project some shared library. In this moment I want to run just simply program (only main function) which will be able add any function witch my external library libAPIenergy.so. I tryed a few solutions from this forum but anyone nothing help.

Below I will present solution which give me least errors.

in main function I include

#include "APIenergy.h" 

CMake file

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}) 

And Errors:

I also have added to system PATH LD_LIBRARY_PATH direcytory with my shared library

export LD_LIBRARY_PATH=$HOME/Lib/Linux/x86 

.::EDIT::. 1

My CMake after Yours sugestion

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}) 

Error from CMake

Error:Cannot specify link libraries for target "TestProject" which is not built by this project. 

And one important thing. I deployed APIenergy.h file to main directory with project.

.::EDIT 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

Error:Cannot specify link libraries for target "TestProject" which is not built by this project. 

.::EDIT 3::.

Now CMake file is without error

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) 

And simply code which I have tryed lunch

#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; } 

Error from compiler

回答1:

Use add_library if you are creating your own library from source files.

Use target_link_libraries if you are specifying that your target needs to link against a library from someone else.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!