Posts Tagged ‘linker’

VC,dll的几个问题及解决

星期五, 2月 5th, 2010

第一个问题,如果工程A依赖于工程B,而工程B是一个dll工程,如果工程B并没有导出任何接口的话,那么工程A不能被编译。因为虽然工程B的dll文件成功生成了,然而由于没有任何导出符号,那么lib文件不会被生成。所以工程A认为工程B没有成功编译,工程A对工程B的依赖是通过检查lib的生成的。

之所以碰到第一个问题,因为工程B没有导出符号。

工程B是这样的,我把所有的导出符号都定义在一个lib里面,而dll工程希望链接这个lib而得到导出符号。问题是dll主工程没有调用到lib里面的任何符号,所以链接器认为根本没必要连接这个lib,所以最终得到的dll没有任何导出符号。

由于不希望在dll主工程里面加入任何别的代码(比如写一个无用的函数仅仅调用一下lib里面某个函数),主要是希望dll的源文件可以顺利在别的环境下编译,我又不希望有乱七八糟的宏影响阅读。

试了颇长的时间,Project->Setting->Link->Input下面有一个框是:Force symbol references:

里面可以填上lib里面的随意一个符号就行了。不过要注意的是,可能要在前面增加一个下划线。

比如 AAA => _AAA