19
|
StackedCrooked · 技术社区 · 15 年前 |
![]() |
1
16
如果要分发静态库,则可以分发与版本无关的库,具体取决于所做的操作。如果您只是打电话给操作系统,那么您可能没事。可能是C RTL函数。但是,如果使用任何C++标准库函数、类或模板,则可能不使用。 如果分发DLL,则每个VS版本都需要单独的库。有时,您甚至需要为不同的服务包级别提供单独的库。正如Volkerk所提到的,库的用户必须使用兼容的编译器和链接器设置。即使你做的一切都是正确的,用户也可能需要链接到与你的库不兼容的其他库。 由于这些问题,我没有花时间为您的用户构建所有这些库,而是花时间让它们尽可能容易地构建,这样用户就可以自己构建它们,而不必大惊小怪。 |
![]() |
2
17
不正常,没有。用VS工具构建的库链接到“微软C运行时”(称为MSVCRT,后面是版本号),提供C和C++标准库函数,如果您试图运行一个程序,需要两个不同版本的运行时,则会出现错误。 除此之外,不同的编译器版本会产生不同的编译代码,并且一个编译器版本的代码经常与另一个编译器版本不兼容,除了在最普通的情况下(如果它们产生相同的代码,那么没有必要有不同的版本:) |
![]() |
3
7
一般来说,不可能链接到使用不同编译器、同一编译器的不同版本、甚至同一编译器版本的不同设置构建的库,从而获得一个可工作的应用程序。(虽然它可能对语言和STD库的特定子集起作用)但是,C++中没有标准二进制接口——对于C中的某些公共平台甚至没有一个。 要实现这一点,您要么需要将库包装在C API中,要么必须为您想要支持的每个编译器、编译器版本和编译器设置提供一个二进制文件。 |
![]() |
4
2
如果您的库项目是一个静态库,那么您必须为您希望用户使用的每个Visual Studio版本提供一个构建。在您给出的示例中,这相当于同时提供了VS2005和VS2008库。 如果您的库项目是一个动态库,那么您可以稍微回避这些问题,但这意味着用户需要确保他们使用与您的构建环境兼容的“Microsoft C运行时”。如果将“Microsoft C运行时”静态链接到动态库中,则可以消除该条件。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 3 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 3 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |