首页 > 解决方案 > 在 Windows 中准备一个将在 Linux 中使用的共享对象

问题描述

我有一个 C# 项目,它从 C++ 代码中对 dll 文件进行 Dllimport。该解决方案针对 .NET Core,并且可执行文件在 Windows 中运行良好。

我尝试使用 linux-x64 作为目标运行时发布解决方案。我将 c++ 代码编译成一个包含在项目文件中的 .so 文件。但是,当我尝试在 linux 中执行程序时出现错误无法加载共享库

如果我遇到file共享对象,我会得到:

shared_lib.so: PE32+ executable (DLL) (console) x86-64, for MS Windows

所以也许问题是 .so 文件没有为 linux 正确编译?我基本上只是采用相同的编译行并将 shared_lib.dll 更改为 shared_lib.so 但我想这太天真了。特别是我有:

g++ -c -DBUILD_MY_DLL shared_lib.cpp 
g++ -shared -o shared_lib.so shared_lib.o -Wl,--out-implib,libshared_lib.a

为了使共享库可用于 linux,是否必须设置一些标志?

标签: c++linuxvisual-studioshared-libraries

解决方案


推荐阅读