cl编译生成动态库的问题

为什么同样的源文件,使用vs2019生成的dll和cl生成的动态库不一样,动态库中的函数使用了c++风格的参数(如std::string)就会出问题,cl生成的动态库在程序中加载传入参数时会报错,而vs2019生成的动态库就能正常使用,以下是我的cl命令
std::string cmd = "cl /LD /EHsc /MD /I " + appPath + "/I " + appPath + "\stdafxm.cpp /Fe" + dllName + " " + sourcePath;
int result = system(cmd.c_str());
请帮帮忙看看

VS2019中、项目、属性、配置属性、C/C++、命令行、所有选项
里看看VS2019使用的命令行和你的cl命令有什么区别

【以下回答由 GPT 生成】

问题出在使用cl命令编译时,没有正确指定C++标准库的链接选项。cl命令需要使用/LIBPATH来指定C++标准库的路径,并使用/link来指定要链接的库文件。

具体的解决方案如下:

std::string cmd = "cl /LD /EHsc /MD /I " + appPath + "/I " + appPath + "\\stdafx.cpp /Fe" + dllName + " " + sourcePath + " /link /LIBPATH:" + appPath + " /LIBPATH:" + cppStdLibPath;
int result = system(cmd.c_str());

在以上代码中,你需要将appPathcppStdLibPath替换为正确的路径。

/LIBPATH选项指定链接器搜索库文件的路径,其中appPath是你的代码所在路径,cppStdLibPath是C++标准库的路径。

这样设置后,编译时会正确链接C++标准库,解决了动态库中使用C++风格参数的问题。

希望以上解决方案能够帮助到你,如果还有其他问题,请随时提问!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^