gpt4 book ai didi

c++ - c中的简单c风格导出导入

转载 作者:行者123 更新时间:2023-11-28 07:54:28 26 4
gpt4 key购买 nike

我正在尝试使用 Visual Studios 2012 进行简单的 C 风格函数导出和导入。我做了两个项目。我的最终目标是从 Fortran 程序调用 c++ 函数,因此我试图使 dll 尽可能简单。第一个项目仅包含 1 个包含以下代码的文件:

#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;
}

当我在没有公共(public)语言运行时支持的情况下进行链接时,出现错误:

Error   1   error LNK1107: invalid or corrupt file: cannot read at 0x2B8    

如果我使用公共(public)语言运行时支持进行编译,我会得到错误:

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 之间的链接,那么我是否希望在使 .dll 与 fortran 链接时使用/clr(我假设我不需要)?

最佳答案

Windows 上的共享库由两个 文件组成。一个 .dll 和一个 .lib。您必须提供 .lib 一个作为链接器输入,并且您必须将 .dll 放在与可执行文件相同的目录中或 %PATH% 在运行时。

关于c++ - c中的简单c风格导出导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com