如何使用不同版本的mingw使用静态库构建?

问题描述:

问候, 我面临着在Windows下使用静态库的复杂情况。 静态库是由与Eiffel工作室捆绑在一起的特定版本的mingw构建的。由于Eiffel studio使用mingw将其输出创建为静态库,因此我无法控制此配置。 如果我尝试在Eclipse CDT中使用这个静态库,它使用了更新版本的mingw,那么我无法编译我的项目。这是因为我必须为诸如winsock之类的各种库提供-l选项,并且由于生成静态库的编译器版本和我的代码之间的差异,这似乎不起作用。如何使用不同版本的mingw使用静态库构建?

如果我强制Eclipse使用与Eiffel studio自带的相同的mingw目录,那就是编译静态库的那个,然后我可以编译我的代码(虽然这里还有其他一些问题) 我不想约束我的C++开发仅仅是因为一个静态库是用特定版本的mingw构建的。

那么如何从我自己的mingw版本使用这个静态库?这是Windows XP中顺便说一句..

问候 谢雷夫

虽然我没有很多的信息在这里是我会做什么:

  1. 尝试编译与新版本明明,看看你能不能让它工作。错误是在这种情况下非常重要(您也应该检查的MinGW手动/邮件列表/论坛,发现有关的MinGW版本

  2. 单独从程序库和包裹其所有功能之间的兼容性 - 以避免不同的不兼容的编译标志(你可以创建一个不同的库 - 甚至一个DLL并调用你的新函数(一些库函数的包装)

  3. 决定项目的哪个部分是必需的 - 包含库或其余部分的代码

    1. 如果库是强制性我将编译代码与该版本的MinGW的
    2. 否则我会尝试找到该库同等或消除它

其他选项可能存在,但这是我会做的(按此顺序)

+0

谢谢。我已经用最新版本的mingw编译了,这让我从很多麻烦中解脱出来。我很好奇,是否有可能将一个静态库包装在一个DLL中,以克服编译器版本问题?我的意思是用旧版本编译的dll,包装静态库及其依赖关系? – mahonya 2010-09-17 11:44:07

+0

这取决于问题。通常,使用DLL(不管使用什么编译器构建它)**都会遇到问题**如果使用LoadLibrary和GetProcAddress解决符号问题,但是如果链接到DLL问题可能(通常会),因为链接是每个开发套件特定的进程(即使在版本之间也可能不同),因此可能会出现问题。通过包装旧的编译器和导出函数 - 如果这是可能的! - (用GetProcAddress解决)你绕过这些问题。当然,代码也必须更改为使用GetProcAddress等。 – INS 2010-09-18 09:21:50