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
내 C# 응용 프로그램은 Linux 시스템에서 완벽하게 실행됩니다.
// 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 애플리케이션 패키지(TV용 C# 애플리케이션)를 통해 스마트 TV를 통해 실행하려고 하면 다음과 같은 결과가 나타납니다.
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가 모두 작동하는지 확인했지만 권한은 여전히 거부되었습니다. 이제 문제는 이것이 실제로 액세스 관련 문제인지, 아니면 TV에서 앱 번들이 처리되는 방식과 관련이 있는지입니다.