我有一个工程 A ,但是想把其中的一些函数弄成一个静态链接库B,这样,其他程序也可能使用(只静态使用,就是链接时候,不是运行时候), 但是 静态链接库B 链接到 工程A中的时候要用到 很多其他环境库C。 而这些环境库C 是我在做工程A 时候可能没有的。那么怎么建立这样一个静态链接库B呢?我用VC里的静态库生成方法是很容易的可以生成B.LIB,但是将B.lib 链接到工程A 中的 时候它却要求我提供 环境库c ,而环境库c 我是希望链接到B.lib 中的。因为只有B.lib 中用到了他们,说明我的B.lib 没做对。请问如何做?
可以做成资源放到B里,动态调用他们是通过 输入库 那里填写后链接上的(如果B.LIB是个EXE的话)
是不是工程A也这样设置了?
可以用lib.exe合并两个lib文件,VS2003以上应该都有。到开始菜单里面运行"Visual Studio .NET 200X 命令提示",然后lib.exe a.lib b.lib,这样b就合并到a里面了。
这个是a.lib、b.lib以及exe的默认导入库方式不同导致的,其中至少有一个链接了LIBC或者LIBCMT(也就是“C/C++->代码生成->运行时库”选项里面选的不是带DLL的方式),并也至少有一个链接了MSVCRT(也就是同样的地方选择了带DLL的方式)。这个warning是链接器的warning不是编译器的,需要在项目配置的(链接器->命令行->附加选项)里面加上“/ignore:4049”,我找不到对应的代码写法。不过或许可以通过消除lib自带的默认库的方式,来解决这个warning,这里给你一个clrdlib.exe试一下是否可行。用法是命令行下“clrdlib.exe a.lib”,这样就消除了a.lib的默认导入库。exe链接的时候选择链接MSVCRT.LIB应该就不会有warning,不过如果三者都不是MFC程序还是建议选择链接LIBCMT,虽然链接器会报4217警告,但不是不需要依赖DLL。clrdlib下载地址:http://d.namipan.com/d/0f28a6dbcd92e4a45d91b9085895ce36f69dab9e92400000
我想做干净点。自己在b.lib 中设置好。清除这个警告。怎么做呢? 就是如何在 B.LIB 的原文件中设置消除链接警告呢(等完了一起给分,还另加分给你)
这个我曾经也翻了不少资料,一直找不到对应的代码写法来屏蔽这类链接器warning,如果LZ可以找到,那也请分享一下。
话说回来,LZ试过用clrdlib.exe来消除lib自带的默认C/C++运行库么?我对实验结果也感兴趣……
这个 clrdlib.exe 是谁编写的?怎么都查不到任何信息?