首页 > 解决方案 > CMake 链接器标志

问题描述

我有一个 C++ 代码,分为 2 个文件 image_desc_try.cpp、common.cpp 和 common.h。此代码涉及 Nvidia CUDA 和 NVidia NVInfer 的使用。

我可以使用以下代码成功编译整个代码。

 g++ -std=c++11 image_desc_try.cpp  common.cpp -I /usr/local/cuda/include -L /usr/local/cuda/lib64   -lcudart -lnvinfer -lnvparsers

现在,我正在尝试用 CMake 做同样的事情,

include_directories( "/usr/local/cuda/include" )
add_executable( desc_server
    common.cpp
    image_desc_try.cpp
)

target_link_libraries( desc_server
   ${catkin_LIBRARIES}
   /usr/lib/aarch64-linux-gnu/libnvinfer.so
   /usr/lib/aarch64-linux-gnu/libnvparsers.so
   /usr/local/cuda-10.0/targets/aarch64-linux/lib/libcudart.so
)

这给了我链接错误:

/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/libnvparsers.so: undefined reference to `getPluginRegistry'
/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/libnvparsers.so: undefined reference to `getInferLibVersion'
/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/libnvparsers.so: undefined reference to `getLogger'
/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/libnvparsers.so: undefined reference to `nvinfer1::utils::reshapeWeights(nvinfer1::Weights const&, int const*, int const*, void*, int)'
collect2: error: ld returned 1 exit status
tx2_whole_image_desc_server/CMakeFiles/desc_server.dir/build.make:157: recipe for target '/home/dji/catkin_ws/devel/lib/tx2_whole_image_desc_server/desc_server' failed
make[2]: *** [/home/dji/catkin_ws/devel/lib/tx2_whole_image_desc_server/desc_server] Error 1
CMakeFiles/Makefile2:1578: recipe for target 'tx2_whole_image_desc_server/CMakeFiles/desc_server.dir/all' failed
make[1]: *** [tx2_whole_image_desc_server/CMakeFiles/desc_server.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

如何解决这个问题?

标签: c++linuxgcccmake

解决方案


推荐阅读