当我构建我的静态库时它是否链接到运行时库?它是否将运行时库中的代码“放入”我的库?
或者它只是链接器的信息,因此当它链接最终的exe(dll)时,它知道用于此特定静态库的运行时库的版本是什么?
我是否需要在所有静态库和dll中使用相同版本的运行时库? 我是否需要在所有静态库和dll中使用相同类型(/ MT / MTd / MDd ...)?
还有一个简短的问题,通常静态Windows库的大小是linux静态库的两倍吗?
答案 0 :(得分:1)
或者它只是链接器的信息,以便在链接最终时 exe(dll)它知道要使用哪个版本的运行时库 特别是静态库?
是
我是否需要在所有静态中使用相同版本的运行时库 libs和dll?
我强烈建议。如果你没有,你会得到一堆链接器错误。
我是否需要在所有静态中使用相同类型(/ MT / MTd / MDd ...) libs和dll?
是。
如果要释放要由第三方使用的DLL,您可能需要为它们提供使用/ MTd标志的YourLibraryD.dll和使用/ MT的YourLibrary.dll。每个都有不同的解决方案配置。没有人再使用单线程版本了,因为性能损失现在大多不相关,不值得冒险。
编辑:即使您没有发布到第三方,您仍然希望确保在调试-vs-释放模式下链接到正确的DLL。这是因为当你在Debug中使用/ MTd构建YourApp.exe时,你会希望它链接到YourLibraryD.dll。在Release中构建YourApp.exe时,使用/ MT,您将希望它在发布模式下链接到YourLibrary.dll。您可以保持DLL名称相同并使用目录消除歧义:因此,您将在调试模式下链接到bin \ debug \ YourLibrary.dll,并在发布模式下链接到bin \ release \ YourLibrary.dll。很抱歉,如果这不是您的问题,那么最好先知道何时切换构建配置,然后突然开始出现链接器错误。