error: linker command failed with exit code 1 (use -v to see invocation)
2015-08-14 13:22
585 查看
使用C++编译程序,有时会出现这个错误:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
具体原因有许多,目前遇到的有这些:
1. 分离式 (允许模版类的声明和实现分开)使用关键字export即可。但由于这是C++03的标准了,许多主流的编译器都不再支持这种方式了(包括我的clang)。到了C++ 11,便完全放弃了。
2. 包含式(目前使用的模版编译标准)要求模版类的声明和实现放在一起。
因为现在较新的C++编译器都只支持包含式了,所以把声明和实现分开,就会报错。但是,我测试过了,假设有两个文件:模版类的声明和实现,不加export关键字,编译出模版类的.o文件是没有问题的。只有在将demo文件main.o(含模版类实例化语句)和模版类的.o文件链接起来的时候,才会出现链接错误(linker error)。
References:
[1] http://www.zhihu.com/question/20630104
[2] 《C++ Primer Plus sixth edition》P569
然后还有一个找不到,其实就是一个函数找不到另外一个函数,换言之,即不在一个域(scope)里面。
这是发生概率最高的,此种类型的错误通过log的信息很容易能找出来。
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
具体原因有许多,目前遇到的有这些:
1. template的使用问题--模版类的声明和模版类的实现分开:
C++的模版编译标准有两种方式:1. 分离式 (允许模版类的声明和实现分开)使用关键字export即可。但由于这是C++03的标准了,许多主流的编译器都不再支持这种方式了(包括我的clang)。到了C++ 11,便完全放弃了。
2. 包含式(目前使用的模版编译标准)要求模版类的声明和实现放在一起。
因为现在较新的C++编译器都只支持包含式了,所以把声明和实现分开,就会报错。但是,我测试过了,假设有两个文件:模版类的声明和实现,不加export关键字,编译出模版类的.o文件是没有问题的。只有在将demo文件main.o(含模版类实例化语句)和模版类的.o文件链接起来的时候,才会出现链接错误(linker error)。
References:
[1] http://www.zhihu.com/question/20630104
[2] 《C++ Primer Plus sixth edition》P569
2. 函数没有实现或找不到
举个例子:有两个文件:main.cpp 和 LinkedList.cpp,当main.cpp中使用了LinkedList.cpp中的函数。这个函数还没实现的。把这两个文件编译成.o文件的时候没有问题。但是链接的时候会出问题。然后还有一个找不到,其实就是一个函数找不到另外一个函数,换言之,即不在一个域(scope)里面。
这是发生概率最高的,此种类型的错误通过log的信息很容易能找出来。
相关文章推荐
- J - A Bit Fun-----(2015 summer training #9)
- SGU183 Painting the balls(DP+优化)
- D - Minimum palindrome----(2015 summer training #9)
- C - We Love MOE Girls-----(2015 summer training #9)
- B - Median-----(2015 summer training #8(Qualifying))
- Could not connect to '10.7.100.182' (port 22): Connection failed
- HIT 2060 Fibonacci Problem Again
- LeetCode Factorial Trailing Zeroes
- LeetCode Factorial Trailing Zeroes
- epoll_create, epoll_ctl和epoll_wait
- 2015 Multi-University Training Contest 2(hdu 5300 - hdu 5309)
- Clock Skew , Clock Uncertainty和 Period
- libvirtError: no connection driver available for qemu:///system 解决办法
- 2015 Multi-University Training Contest 8 hdu 5384 Danganronpa
- tools:context=".MainActivity的作用
- 使用Grails快速开发Web应用程序
- 构建您的第一个Grails 应用程序
- 2015 Multi-University Training Contest 1(hdu 5288 - hdu 5299)
- hdu1021Fibonacci Again找规律
- PS和AI软件区别