- 主题:库冲突?
一个工程编出的程序原本是ok的。后面给它加上一个源文件,这个源文件与原来的工程没有任何关系,就是原来工程里面的代码都不调用新的源文件里的任何东西。新的源文件的唯一效果看起来就是促使原来的程序去链接了某些这个源文件用到的库。 结果,这个工程加上新源文件之后编出来的程序,就崩了,或者运行到某个地方就卡死不动了。
这种情况,原因呢我能想象得到的只有新链接的库里面含有一些函数或全局变量,命名封装不好, 其它库也有,导致执行了同名不同代码的函数,执行路径变了。还有其它可能吗?
--
FROM 113.116.118.*
可能没说清楚,我是说这个新加入的源文件相对于原来之前的源码是独立的,没有被原来的源码所调用。但是编译(一般我这么说而没有特别说明的时候意思会包含链接)的时候,只要这个新的源文件调用了某个库,整个程序都要去链接这个库的吧,不管你是否执行的。
【 在 ziqin 的大作中提到: 】
: 新的源文件的唯一效果看起来就是促使原来的程序去链接了某些这个源文件用到的库
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 这个是什么鬼?原来的程序没有调用新的源文件,但是会链接新的源文件“用到”??的库?
: ...................
--
FROM 113.118.168.*
全部符号这个,不会弄,而且符号应该很多很多,感觉很难搞
崩溃信息看不出来,最后都是搞到标准库或者系统调用里面去了,看不出来
其实最近遇到过两次这类情形,一个是崩了,另一个是链接boost库之后,程序的同步行为变化了,好像影响了锁的状态,但是这个环境比较复杂(共享内存+互斥量同步+boost序列化/反序列化),我对多线程也不精,不知道是不是同步用的有问题,但是表现上是一链接boost(还是一样仅仅只是在一个新的独立的文件里引用boost,定义一个变量而已,没有任何调用),程序同步行为就变化
最后都是惹不起,绕道走了
【 在 z16166 的大作中提到: 】
: 可以对比加这个文件前后的二进制产物中的全部符号信息(map/pdb文件),看看新加的这个cpp导致的产物里有没全局的初始化。
: 最直接的,就是查崩或者卡的直接原因。
--
FROM 113.118.168.*
但现在关心的问题首先是,新加入的东西有哪些途径影响原来的程序?
【 在 javaboy 的大作中提到: 】
: 原来就有问题,只不过没崩
:
--
FROM 113.118.168.*