使用 g++ 创建了一个基本的 C++ 共享对象文件:
// calculate.hpp
#ifdef __cplusplus
extern "C"
{
#endif
// typedef struct ...;
// function decls
int Add(int x, int y);
#ifdef __cplusplus
}
#endif
带有实现以下功能的 C++ 文件:
// calculate.cpp
#include <iostream>
#include "calculate.hpp"
int Add(int x, int y) {
return x + y;
}
我基本上通过创建共享库
g++ -fPIC -shared calculate.cpp -o calculate.so
我的 Linux 系统上的 C# 应用程序可以完美运行:
// sandbox.cs
using System.Runtime.InteropServices;
namespace sandbox;
class Program
{
// (changed the directory due to privacy stuff)
[DllImport("/.../shared-objects/calculate/libcalculate.so")]
static extern int Add(int x, int y);
static void Main(string[] args)
{
int result = Add(15, 20);
Console.WriteLine($"Result of so is: {result}");
}
}
然而,当我尝试通过我的智能电视通过 Tizen 应用程序包(电视的 C# 应用程序)运行它时,我得到的是:
System.DllNotFoundException: Unable to load shared library '/home/guest/libtest/libcalculate.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: /home/guest/libtest/libcalculate.so: cannot open shared object file: Permission denied
正如你所看到的,我在 /home/guest/ 中有 .so 文件,但我还在其他地方测试了它:/lib/、/opt/data、/home/。就在我能想到的任何地方。仍然是相同的异常:权限被拒绝。
我也通过 chmod 修改了该文件(当前为 -rwxrwxrwx),并确保 / /usr 和 /usr/lib 的 ls -ld 一切正常,但权限仍然被拒绝。现在的问题是,这实际上是与访问相关的问题,还是与电视上如何处理应用程序包有关?