Warm tip: This article is reproduced from serverfault.com, please click

shared libraries-.Net Core Web API Docker(Linux)

(shared libraries - .Net Core web API Docker (Linux))

发布于 2020-11-21 12:44:37

我具有.NetCore Web 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);

当我在Windows环境下的Visual Studio中调试它时,出现了类似的异常

想加载格式不正确的程序。(0x8007000B)。

这可能是因为尝试在Windows环境中访问Linux文件,如果我使用CppAppOutput.dll代替libCppAppOutput.so,则可以成功调用dll中的方法。但是我的实际要求是在Linux环境中运行整个应用程序,并且仅使用.so文件进行处理,因此我创建了目标操作系统为Linux的docker映像,并尝试使用以下命令从运行docker的方式调用其中的方法:

docker run -p 8081:80 name_of_docker_image:tagname

然后我得到一个异常,如:

无法加载共享库'libCppAppOutput.so'或其依赖项之一。为了帮助诊断加载问题,请考虑设置LD_DEBUG环境变量:libCppAppOutput.so:无法打开共享库文件:没有这样的文件或目录。

但是我可以通过以下命令看到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泊坞窗调用.so文件。如果需要详细说明此问题,请发表评论,我会做。提前致谢。

Questioner
Colbay
Viewed
11
Colbay 2020-11-28 15:49:00

我可以在同事和朋友的帮助下解决此问题。libCppAppOutput.so(XML解析器)具有依赖性。即使该依赖项程序包已安装在容器中,在创建libCppAppOutput.so时也无法进行配置。这是通过bash中执行ldl libCppAppOutput.so命令确定的

谢谢大家花时间阅读和分析问题!拥有更多N个更好的编码天!