자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi .so 로드가 안됩니다
2015.09.03 11:28
수고하십니다. 초보 개발자인데요..
ffmpeg 관련한 실행코드를 .so로 빌드하여 안드로이드 플랫폼용으로 개발을 하려하는데
main 함수를 오픈할 수있는지는 둘째치고.... open부터 되질 않습니다. 계속 handle값이 0이 리턴되요
deploy 설정 을 assets\internal\ 이나, library\libs\armeabi-v7a\ 로 맞춘후에
dlopen도 써보고, loadlibrary도 써보고, 또 로컬이나 연결기기에 .so파일을 직접 저장하여 절대경로로 불러내봐도
0이 리턴 됩니다.
아래는 사용한 코드이고요
제가 잘못한게 있거나 다른방법이 있으면 알려주시면 감사하겠습니다.~
implementation
uses
Posix.dlfcn;
var
main: function(x:integer; ch:array of pchar):integer;cdecl;
hd : Intptr; //or THANDLE
procedure TForm1.FormCreate(Sender: TObject);
var
path : String;
lib: String;
//marshaller:TMarshaller;
begin
//path := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetDocumentsPath);
//lib := 'libffmlink.so';
//hd := LoadLibrary('/storage/emulated/0/libffmlink.so');
hd := Posix.dlfcn.dlopen(MarshaledAString('/storage/emulated/0/libffmlink.so'), RTLD_LAZY);
if hd = 0 then
memo1.lines.Add('lib open failed')
else
memo1.Lines.Add('lib open succeed');
end;
procedure TForm1.AndroidClick(Sender: TObject);
begin
if hd = 0 then
Exit;
main := GetProcAddress(hd, 'main');
if not Assigned(main) then
Memo1.Lines.Add('get function failed');
end;
end.
Delphi .so 로드가 안됩니다
2015.09.03 11:28
수고하십니다. 초보 개발자인데요..
ffmpeg 관련한 실행코드를 .so로 빌드하여 안드로이드 플랫폼용으로 개발을 하려하는데
main 함수를 오픈할 수있는지는 둘째치고.... open부터 되질 않습니다. 계속 handle값이 0이 리턴되요
deploy 설정 을 assets\internal\ 이나, library\libs\armeabi-v7a\ 로 맞춘후에
dlopen도 써보고, loadlibrary도 써보고, 또 로컬이나 연결기기에 .so파일을 직접 저장하여 절대경로로 불러내봐도
0이 리턴 됩니다.
아래는 사용한 코드이고요
제가 잘못한게 있거나 다른방법이 있으면 알려주시면 감사하겠습니다.~
implementation
uses
Posix.dlfcn;
var
main: function(x:integer; ch:array of pchar):integer;cdecl;
hd : Intptr; //or THANDLE
procedure TForm1.FormCreate(Sender: TObject);
var
path : String;
lib: String;
//marshaller:TMarshaller;
begin
//path := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetDocumentsPath);
//lib := 'libffmlink.so';
//hd := LoadLibrary('/storage/emulated/0/libffmlink.so');
hd := Posix.dlfcn.dlopen(MarshaledAString('/storage/emulated/0/libffmlink.so'), RTLD_LAZY);
if hd = 0 then
memo1.lines.Add('lib open failed')
else
memo1.Lines.Add('lib open succeed');
end;
procedure TForm1.AndroidClick(Sender: TObject);
begin
if hd = 0 then
Exit;
main := GetProcAddress(hd, 'main');
if not Assigned(main) then
Memo1.Lines.Add('get function failed');
end;
end.
아래 파란크리스마스님이 작성한 내용이 도움이 될것같습니다.
http://bluexmas.tistory.com/373