도와주세요!!
밤을 밝히며 리눅스밭에서 땀흘리는 리눅스포팅자에게 또 고민이 생겼습니다.
엔진을 리눅스에서 콤파일은 다 했는데요....
데바깅을 위해서 테스트프로그램을 만들고 거기서 엔진을 로드해서 실행을 할려구 시도했습니다.그런데 쉽게 생각했던 부분에서 에러가 발생했는데 도무지 해결방도가 없네요~~
이우영선배님을 비롯한 고수님들 도움 시급히 바랍니다.
테스트환경을 아래에 적었습니다.(n번 테스트프로젝트를 창조하고 라이브러리도 다시 만들어 콤파일했으나 잘 안돼네요..)
라이브로리 (module1.cpp)
int func_export()
{
return 10;
}
int func_hidden()
{
return 10;
}
콤파일:
g++ -c -g -fPIC -MMD -MP -MF build/Debug/GNU-Linux-x86/module1.o.d -o build/Debug/GNU-Linux-x86/module1.o module1.cpp
g++ -o dist/Debug/GNU-Linux-x86/libtestLib.so build/Debug/GNU-Linux-x86/module1.o -shared -fPIC
생성한 라이브러리를 테스트프로그램에서 다음과 같이 이용했습니다.
int main(int argc, char** argv) {
char* msg;
void* lib_handle = dlopen("/root/Test_Projects/testLib/dist/Debug/GNU-Linux-x86/libtestLib.so", RTLD_LAZY);
if (lib_handle == 0)
{
msg = dlerror();
}
int (*f)();
f = (int (*)())dlsym(lib_handle, "func_export");
if (f == 0)
{
msg = dlerror();
}
return 0;
}
콤파일
g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
g++ -o dist/Debug/GNU-Linux-x86/testapp build/Debug/GNU-Linux-x86/main.o -ldl
환경은 우와 같습니다.
콤파일은 성과적으로 되고 테스트어플리케이션에서 dlopen함수도 성공하여 so파일이 로드도 성공합니다.
단 dlsym함수에서 0이 리턴되는데 에러메시지는
"/root/Test_Projects/testLib/dist/Debug/GNU-Linux-x86/libtestLib.so: undefined symbol: func_export"
이렇게 msg에 출력됩니다.
제가 무엇을 놓치고, 잘못했는지... 선배님들께 긴급요청드립니다.
개발도구는 NetBeans IDE를 이용했습니다.
안녕하세요.
라이브러리 PATH를 다시한번 잘 확인해 보셨으면 좋겠습니다.^^