gpt4 book ai didi

c++ - 使用 cmake 对共享库的 undefined reference

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:05 25 4
gpt4 key购买 nike

我看起来很有可能找到这个答案,但我找不到任何与我的情况相关的内容。这看起来很容易,这就是为什么它如此令人沮丧。

我正在使用 CMAKE 构建一个项目。我正在生成两个共享库。一个包括另一个。我也在生成一个可执行文件。可执行文件链接到封装另一个的共享库。这是代码的相关部分:

################################################################################ 
# Make the shared libraries
################################################################################
# Standard stuff
add_library(er SHARED src/std_math.cc src/snapshot.cc)
include_directories(hdr)
target_link_libraries(er rt)

# DSP library
add_library(dsp SHARED src/dsp.cc)
include_directories(hdr)
target_link_libraries(dsp er /usr/lib/libfftw3f.so /usr/lib/libfftw3.so)

################################################################################
# Make an Executable
################################################################################
message("-- Making executable for testing --")
add_executable(er_test test/dsp_test.cc)
include_directories(hdr)
target_link_libraries(er_test dsp)

################################################################################
# What to do with make install
################################################################################
message ("-- Writting install scripts --")

# See if there is an install directory already assigned. If not, set it to the
# system default.
if (NOT DEFINED INSTALL_DIR)
set (INSTALL_DIR /usr/local/)
endif (NOT DEFINED INSTALL_DIR)
message (" -- install_dir = ${INSTALL_DIR}")

# Install the libraries and header files to the appropriate places
install (TARGETS er dsp DESTINATION ${INSTALL_DIR}/bin)
install (FILES hdr/dsp.hh hdr/snapshot.hh hdr/std_math.hh DESTINATION ${INSTALL_DIR}/include)

这是我得到的错误。

CMakeFiles/er_test.dir/test/dsp_test.cc.o: In function `main':
dsp_test.cc:(.text.startup+0x11e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, std::vector<int, std::allocator<int> > const&)'
dsp_test.cc:(.text.startup+0x142): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, std::vector<int, std::allocator<int> > const&)'
dsp_test.cc:(.text.startup+0x166): undefined reference to `std::vector<int, std::allocator<int> > subvec<int>(std::vector<int, std::allocator<int> > const&, int, int, int)'
dsp_test.cc:(.text.startup+0x182): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, std::vector<int, std::allocator<int> > const&)'
dsp_test.cc:(.text.startup+0x1b6): undefined reference to `std::vector<int, std::allocator<int> > subvec<int>(std::vector<int, std::allocator<int> > const&, int, int, int)'

还有更多的来源。我尝试过使用静态库,但它只会延迟问题,直到我尝试将这些库包含到下一个可执行文件中。我也尝试过使用 g++ 而不是 c++。我试过交换图书馆订单。此外,这不是模板问题,因为它找不到的至少一个引用不是模板函数。我在库中搜索了这些符号,并且能够找到它们,尽管它们被随机字符放在前面和后面。

我不明白这是怎么回事。请帮忙。

谢谢,

更新

我找到了另一个链接,特别是 this one ,其中提到了 add_subdirectory 的潜在问题。这是另一个项目的子项目。所以我派人进入项目并在那里 build 。有效!但它在父目录中仍然不起作用。也许这可以给某人提供线索。

再次感谢,

最佳答案

不要假定包含 CMakeLists.txt 的目录是运行时的当前目录。相反,只要您需要相对于 CMakeLists.txt 的路径,请使用 ${CMAKE_CURRENT_SOURCE_DIR}。例如:

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/hdr)

关于c++ - 使用 cmake 对共享库的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24601262/

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