水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:主程序与库中都有main函数
5楼
|
z16166
|
2023-10-14 00:42:10
|
展开
链接的时候,假如处理的当前模块(单元)是a, 发现a里面引用了模块b的B()函数,但没直接/间接引用到b里的main()函数,链接器就没必要去检查b里有没main()函数的吧,这个有开销
-Wl,--verbose这个参数是可以看到整个链接的符号查找过程的
链接应该是从crt*.o开始的,crt*.o引用了main(),这个main()的查找顺序,是按你在命令行里指定的模块顺序的。
--
修改:z16166 FROM 221.218.160.*
FROM 221.218.160.*
7楼
|
z16166
|
2023-10-14 01:57:20
|
展开
有开销,默认不会检测,需要用参数显式打开。
【 在 BigCarrot 的大作中提到: 】
:
https://maskray.me/blog/2022-11-13-odr-violation-detection
:
--
FROM 221.218.160.*
9楼
|
z16166
|
2023-10-14 09:39:10
|
展开
Linker默认按模块先后顺序查找引用到的函数,这个顺序是码农提供的,也就是码农保证
在库里面搞一个main(),那是属于蛋疼。即使库里的main()是测试代码,在测试完后也得注释掉。
【 在 BigCarrot 的大作中提到: 】
: 程序正确性都不能保证,还谈什么开销
:
--
修改:z16166 FROM 221.218.160.*
FROM 221.218.160.*
14楼
|
z16166
|
2023-10-14 19:21:12
|
展开
binutils是传统负债也好,事实上的工业标准也好,
这种只做基础功能,然后更进一步的检查做成可选的,感觉这种tradeoff没啥问题
【 在 BigCarrot 的大作中提到: 】
: 你这只是binutils linker的行为,而不是c/c++规定的行为
: 而ld.bfd这样做纯粹是因为最早的时候内存大小的限制io速度慢等造成的
: 事实上这种行为是反直觉的
: ...................
--
FROM 221.218.160.*
16楼
|
z16166
|
2023-10-17 05:02:20
|
展开
楼主的例子跟这个特性没关系,他那个例子里没任何地方标注了弱符号
【 在 weiwallz 的大作中提到: 】
: 难道你们说的是别的事情?
: 不然的话,我感觉老鱼应该知道这个:
:
https://en.wikipedia.org/wiki/Weak_symbol
: ...................
--
FROM 221.218.160.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版