.Net Core web API Docker (Linux) - 无法加载 libMyCpp.so 文件

.Net Core web API Docker (Linux) - unable to load libMyCpp.so file

我有一个 .NetCore 网络 API 并且需要连接到 C++ 共享库 (libCppAppOutput.so)。为此,我在 Web API 的控制器内部使用 DllImport,如下面的代码所示:

[DllImport("libCppAppOutput.so", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "methodNameinCppProject")] 
public static extern int MethodNameInWebAPI(string param1, string param2);

当我在 Visual studio 和 Windows 环境中调试它时,我收到类似

的异常

An attempt was made to load a program with an incorrect format. (0x8007000B).

这可能是因为尝试在 Windows 环境中访问 Linux 文件,如果我正在使用 CppAppOutput.dll libCppAppOutput.so 我可以成功调用dll里面的方法。 但我的实际要求是 运行 整个应用程序在 Linux 环境中,并且只处理 .so 文件,所以我创建了一个 docker 目标 OS 为 Linux 的图像,并尝试使用以下命令从 运行ning docker 调用其中的方法:

docker run -p 8081:80 name_of_docker_image:tagname

然后我得到一个异常:

Unable to load shared library 'libCppAppOutput.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libCppAppOutput.so: cannot open shared object file: No such file or directory.

但是我可以使用以下命令看到 libCppAppOutput.so 文件存在于 docker 图像中,

docker create --name name_of_container name_of_docker_image:tagname
docker start name_of_container 
docker exec -ti name_of_container /bin/bash
root@xyzabc:/app# ls

我正在使用下面的 URL 来测试应用程序

http://localhost:8081/launchUrl/MethodNameInWebAPI/param1/param2

请在这方面帮助我,例如如何从 Linux docker 调用 .so 文件。 如果要详细说明这个问题,请发表评论,我会做的。 提前致谢。

在同事和朋友的帮助下,我能够解决这个问题。 libCppAppOutput.so(XML 解析器)存在依赖关系。尽管该依赖包已安装在容器中,但在创建 libCppAppOutput.so 时遗漏了配置。 这是通过在 bash.

中执行 ldl libCppAppOutput.so 命令来识别的

感谢大家花时间阅读和分析问题! 有更多 N 个很棒的编码日!