Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用armadillo和cmake的链接器错误_C++_Cmake_Qt Creator_Linker Errors_Armadillo - Fatal编程技术网

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