gpt4 book ai didi

c++ - cmake 对我项目中所需的所有静态库都失败

转载 作者:行者123 更新时间:2023-11-30 04:55:13 25 4
gpt4 key购买 nike

我的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需要的所有库,但是在clion调试中,它发生undefined reference to 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编译没有遇到错误。为什么?我在 google 上搜索了 cmakelist 中的 link_directories 等于 g++ 中的 -L,cmakelist 中的 include_directories 等于 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。

关于c++ - cmake 对我项目中所需的所有静态库都失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53153067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com