我使用 Visual Studio 2008 并且对此警告有疑问。
在我们的一个库中,我们设置了“固定基址”标志 (/FIXED) 并定义了一个固定基址。
我们用命令声明一个共享部分
#pragma comment(linker,"/SECTION:FOO,RWS")
#pragma data_seg("FOO")
当我删除 /FIXED 标志时,我收到警告
链接:警告 LNK4092:共享可写部分“FOO”包含重定位;图像可能无法正常运行
我了解,使用此标志,从可执行文件加载时,dll 可能会被重新定位。现在我不明白。为什么不重新定位这些共享部分很重要?这些地址不是每个进程的虚拟地址吗?
有没有办法允许搬迁并有一个共享的部分?我们在更改库接口后遇到了这个问题,如果任何开发人员在不知道这些后果的情况下更改此库,我想在将来避免这种情况。
我也很好奇这是如何工作的。/SECTION 标志的 MSDNA 页面和 4092 警告在这里不是很有帮助。