尝试访问我的自定义共享对象,但权限被拒绝

尝试访问我的自定义共享对象,但权限被拒绝

使用 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 一切正常,但权限仍然被拒绝。现在的问题是,这实际上是与访问相关的问题,还是与电视上如何处理应用程序包有关?

相关内容