我试图做一个简单的c风格的函数导出和导入与视觉工作室2012。我做了两个项目。我的最终目标是从一个Fortran程序调用c++函数,所以我试图使dll尽可能简单。第一个项目只包含一个文件,其中包含以下代码:
#include <stdio.h>
extern "C" __declspec(dllexport) void __cdecl hello()
{
printf("Hello, World!\n");
}这被编译为一个.dll。然后,我在第二个项目的链接输入中包含了这一点,该项目只包含一个文件,其中包括:
extern "C" __declspec(dllimport) void __cdecl hello();
int main(int argc, char *argv[])
{
hello();
return 0;
}当我在没有公共语言运行库支持的情况下链接时,我会得到以下错误:
Error 1 error LNK1107: invalid or corrupt file: cannot read at 0x2B8 如果我使用公共语言运行库支持进行编译,则会得到以下错误:
Error 1 error LNK1302: only support linking safe .netmodules; unable to link 为了解决这个问题,互联网想让我用/clr:pure或/clr:safe编译,但是我的vs却不支持c风格的导出。
我的链接命令行调用当前如下:
/OUT:"c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\Project2.exe" /MANIFEST /NXCOMPAT /PDB:"c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\Project2.pdb" /DYNAMICBASE "c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\*" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /OPT:REF /SAFESEH /PGD:"c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\Project2.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\Project2.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 提前谢谢你的帮助。
另外,如果你们中的任何人比我更了解fortran和c之间的链接,那么我是否希望/clr在使.dll与fortran链接时(我假设我没有)?
发布于 2012-10-24 09:32:42
共享库由Windows上的两个文件组成。一个.dll和一个.lib。您必须提供.lib 1作为链接器输入,并且必须在运行时将.dll放在与可执行文件相同的目录中或在%PATH%中的某个位置。
https://stackoverflow.com/questions/13046380
复制相似问题