.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 个很棒的编码日!
我有一个 .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 个很棒的编码日!