cmake在我的项目中所需的所有静态库都不成功
cmake unsuccessful with all static libraries needed in my project
我的cmake文件如下:
cmake_minimum_required(VERSION 3.12)
project(ICTSentiClfTest)
set(CMAKE_CXX_STANDARD 14)
INCLUDE_DIRECTORIES(
~/lyy/icttextminingplatform/include
)
LINK_DIRECTORIES(/usr/local/lib/libpthread.a
${PROJECT_SOURCE_DIR}/lib/libGolaxyTAP.a
${PROJECT_SOURCE_DIR}/lib/libWordSeg.a
${PROJECT_SOURCE_DIR}/lib/libwdselicense.a
)
add_executable(ICTSentiClfTest src/NewSentiClassify.cpp)
我在项目的lib目录中有cmake需要的所有lib,但在clion调试中,它出现了对XXX错误的未定义引用:
[ 50%] Linking CXX executable ICTSentiClfTest
CMakeFiles/ICTSentiClfTest.dir/src/NewSentiClassify.cpp.o: In function `SentiClassifyAPI(char const*,golaxytap::common::AutoPtr<golaxytap::trainset::DocReader, golaxytap::common::SharedObj<golaxytap::trainset::DocReader> >)':
/home/yiyi/lyy/1/ICTSentiClfTest/src/NewSentiClassify.cpp:21: undefined reference to `Senti_Classifier_Init'
/home/yiyi/lyy/1/ICTSentiClfTest/src/NewSentiClassify.cpp:32: undefined reference to `Senti_Classify_Perform'
/home/yiyi/lyy/1/ICTSentiClfTest/src/NewSentiClassify.cpp:52: undefined reference to `Senti_Classifier_Exit'
CMakeFiles/ICTSentiClfTest.dir/src/NewSentiClassify.cpp.o: In function `CNNSentiClassifyAPI(char const*)':
/home/yiyi/lyy/1/ICTSentiClfTest/src/NewSentiClassify.cpp:60: undefined reference to `Senti_Classifier_Init'
......
我写的makefile:
all:./src/SentiClassify.cpp
g++ -o NewSentiClassify ./src/NewSentiClassify.cpp -I/home/yiyi/lyy/icttextminingplatform/include -L./lib -lGolaxyTAP -L./lib -lWordSeg -L./lib -lwdselicense -L./usr/local/lib -lpthread
clean:
rm -f *.o
使用makefile进行编译不会遇到错误。为什么?我在谷歌上搜索了cmakelist中的link_directories等于g++中的-L,cmakelist的include_directorie等于g++的-I。我的cmakelist文件似乎是正确的,并且与g++编译顺序相同。
在CMakeLists.txt文件中,您应该避免绝对路径(尤其是因为Clion不一定会从您的主目录启动cmake(。
INCLUDE_DIRECTORIES(
<proper-path>/include
)
此外,您似乎不匹配LINK_DIRECTORIES和target_LINK_library。您应该使用以下语句:
add_executable(ICTSentiClfTest src/NewSentiClassify.cpp)
target_link_libraries(ICTSentiClfTest
pthread
lib/libGolaxyTAP.a
lib/libWordSeg.a
lib/libwdselicense.a
)
请注意,默认情况下,/usr/local/lib必须位于LD_LIBRARY_PATH上(链接器在进行链接时将查看的路径(。还要注意,您应该更喜欢target_include_directories,而不是include_directories。
相关文章:
- cmake在我的项目中所需的所有静态库都不成功
- 将静态库链接到不带-fPIC的共享库中
- 为什么虚函数不能是静态的和全局的?
- 如果 std::vector::clear() 不是静态的,如何在没有实例的情况下调用它?
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 调用从模板派生的类的静态方法,而不指定模板
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- C++实用程序::转换在静态链接库中不起作用
- 如何在不使用静态矩形方法的情况下创建 IDOMPathGeometryPtr?
- 静态成员变量不会由 gettext 转换
- 为什么我的静态分析器找不到潜在的未初始化读取?
- 生成成功,但不会给出正确的输出
- 为什么这个文件不成功读取
- 为什么投射不成功
- 将数组声明为静态不会使程序崩溃
- 编译伪C++程序时链接不成功
- 使用std::find()在不成功的搜索中返回一个特定的值而不是0
- 为类成员函数设置断点不成功