我已经寻找了很多地方来寻找这个答案,但我还没有找到任何与我的情况相关的东西。这似乎很容易,这就是为什么这是如此令人沮丧的原因。
我正在与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的潜在问题。这是另一个项目的子项目。所以我加入了这个项目并在那里进行了构建。啊,真灵!不过,它在父目录中仍然不起作用。也许这能给某些人提供线索。
再次感谢,
发布于 2014-07-08 04:28:51
不要假设包含CMakeLists.txt的目录是运行时的当前目录。相反,只要需要相对于CMakeLists.txt的路径,就可以使用${CMAKE_CURRENT_SOURCE_DIR}。例如:
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/hdr)https://stackoverflow.com/questions/24601262
复制相似问题