Vyk*_*tor 5 linker export static-libraries visual-studio-2010 dllexport
我正在为大型项目构建.lib(静态库),我想向库的最终用户隐藏一些函数,但是我需要可以从.c库中的每个文件中调用这些函数(因此不是静态的)。
这恰好相反__declspec(dllexport),我已经找到了gcc的解决方案。
我想使用static,但是静态函数应该仅在“当前.c文件” 内部可用,因此不是这样。
换句话说:我需要一种方法来告诉Microsoft Visual C ++ 2010不要将某些函数导出到final .lib(同时使它们可用于.c项目中的所有其他文件)。
注意:我从未在整个解决方案中使用过__declspec(都不使用__attribute__( visibility)),这可能只是与构建静态库相关的一些默认设置(我无法跟踪)。
这是不可能的。您所要求的与 __declspec(dllexport) 无关,该属性确定哪些标识符在 DLL 外部可见。这肯定会满足您的要求。
但你需要一个静态库。这是一种非常简单的文件格式,它只是一包 .obj 文件。编译完成后由lib.exe打包成一个压缩包。根本没有发生任何事情来解决 .lib 中单独编译的 .c 文件之间的依赖关系。直到链接 .lib 后才会发生这种情况。
此时,客户端代码使用的具有外部链接的标识符与您的标识符之间没有任何区别。当链接器无法弄清楚如何满足您的一个 .c 文件与另一个 .c 文件的外部依赖关系时,尝试隐藏您的文件(如果可能的话)只会导致链接失败。
实现这一目标的唯一方法是将所有代码放在一个翻译单元中,并将函数标记为静态,这样它们就没有外部链接。这非常难看,但可以通过一个包含所有其他 .c 文件的文件来完成。您肯定会忽略该选项,因此请寻求 DLL 解决方案来实现此目的。
| 归档时间: |
|
| 查看次数: |
2225 次 |
| 最近记录: |