C++ 使用armadillo和cmake的链接器错误
我正在运行犰狳教程中的一个示例C++ 使用armadillo和cmake的链接器错误,c++,cmake,qt-creator,linker-errors,armadillo,C++,Cmake,Qt Creator,Linker Errors,Armadillo,我正在运行犰狳教程中的一个示例 # include <iostream> # include <armadillo> using namespace std; using namespace arma; int main() { mat A = randu<mat>(4,5); mat B = randu<mat>(4,5); cout << A*B.t() << endl; return 0;
# include <iostream>
# include <armadillo>
using namespace std;
using namespace arma;
int main()
{
mat A = randu<mat>(4,5);
mat B = randu<mat>(4,5);
cout << A*B.t() << endl;
return 0;
}
当我从命令行运行cmakecmakelists.txt
然后运行make
时,我得到一个链接器错误
cmakecmakelists.txt的输出
——C编译器标识为AppleClang 8.1.0.8020038
--CXX编译器标识为AppleClang 8.1.0.8020038
--检查C编译器是否正常工作:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
--检查C编译器是否正常工作:/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/clang--works
--检测C编译器ABI信息
--检测C编译器ABI信息-完成
--检测C编译特性
--检测C编译特性-完成
--检查CXX编译器是否工作:/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin/clang
--检查CXX编译器是否正常工作:/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xctoolschain/usr/bin/clang--works
--检测CXX编译器ABI信息
--检测CXX编译器ABI信息-完成
--检测CXX编译特性
--检测CXX编译功能-完成
--发现犰狳:/usr/local/lib/libarmadillo.dylib(发现版本“7.800.2”)
--配置完成
--生成完成
--生成文件已写入:/Users/Me/Workspace/DebugTest
make的输出
[50%]构建CXX对象cmakfiles/main.dir/main.cpp.o
[100%]链接CXX可执行主
架构x86_64的未定义符号:
“std::uuu 1::uu基本字符串u公共::uu抛出u长度u错误()常量”,引用自:
std::_1::enable_if::type std::_1::basic_string::u init(char*,char*)在main.cpp.o中
“std::uu 1::locale::use_facet(std::u 1::locale::id&)const”,引用自:
main.cpp.o中的std::u 1::basic_ostream和std:u 1::endl(std::u 1::basic_ostream&)
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
arma::arma_ostream_state::arma_ostream_state(std::_1::basic_ostream const&)位于main.cpp.o中
“std::_1::ios_base::getloc()const”,引用自:
main.cpp.o中的std::u 1::basic_ostream和std:u 1::endl(std::u 1::basic_ostream&)
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
arma::arma_ostream_state::arma_ostream_state(std::_1::basic_ostream const&)位于main.cpp.o中
“std::logic_error::logic_error(std::_1::basic_string const&)”,引用自:
void arma::arma\u stop\u logic\u错误(char const*const&)在main.cpp.o中
main.cpp.o中的void arma::arma\u stop\u logic\u错误(std::\uu 1::basic\u string const&)
(…跳过了许多行…)
ld:找不到架构x86_64的符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
生成[2]:***[main]错误1
生成[1]:***[CMakeFiles/main.dir/all]错误2
make:**[全部]错误2
我确信我的CMakeLists.txt是正确的,因为我可以在QtCreator中构建项目,而不是在命令行上 当我使用QtCreator构建项目时,一切都按预期运行。cmake输出
Running”/usr/local/ceral/cmake/3.6.1/bin/cmake/Users/Me/Workspace/DebugTest'-GCodeBlocks-Unix Makefiles'-DCMAKE\u CXX\u编译器:STRING=/usr/bin/clang++-DQT\u QMAKE\u可执行文件:STRING=“in/Users/Me/Workspace/build DebugTest Desktop Default”。
--C编译器标识为AppleClang 8.1.0.8020038
--CXX编译器标识为AppleClang 8.1.0.8020038
--检查C编译器是否正常工作:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
--检查C编译器是否正常工作:/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/clang--works
--检测C编译器ABI信息
--检测C编译器ABI信息-完成
--检测C编译特性
--检测C编译特性-完成
--检查CXX编译器是否工作:/usr/bin/clang++
--检查CXX编译器是否正常工作:/usr/bin/clang++--正常工作
--检测CXX编译器ABI信息
--检测CXX编译器ABI信息-完成
--检测CXX编译特性
--检测CXX编译功能-完成
--配置完成
--生成完成
--生成文件已写入:/Users/Me/Workspace/DebugTest
CMake警告:
项目未使用手动指定的变量:
QT_QMAKE_可执行文件
编译器输出
17:52:43:正在运行project DebugTest的步骤。。。
17:52:43:开始:“/usr/local/ceral/cmake/3.6.1/bin/cmake”--构建--瞄准所有
扫描目标主机的依赖项
[50%]构建CXX对象CMakeFiles/main.dir/main.cpp.o
[100%]链接CXX可执行主
[100%]已建目标干管
17:52:45:进程“/usr/local/ceral/cmake/3.6.1/bin/cmake”正常退出。
17:52:45:运行时间:00:02。
主方法运行良好
为什么它在这种情况下起作用?
QtCreator在其cmake调用中使用了几个额外的标志
/usr/local/Cellar/cmake/3.6.1/bin/cmake /Users/Me/Workspace/DebugTest '-GCodeBlocks - Unix Makefiles' -DCMAKE_CXX_COMPILER:STRING=/usr/bin/clang++ -DQT_QMAKE_EXECUTABLE:STRING=
我尝试了几个变体,似乎需要-DCMAKE\u CXX\u编译器:STRING=/usr/bin/clang++
标志才能成功链接
命令
cmake CMakeLists.txt -DCMAKE_CXX_COMPILER:STRING=/usr/bin/clang++
make
在命令行上成功编译项目
cmake CMakeLists.txt -DCMAKE_CXX_COMPILER:STRING=/usr/bin/clang++
make