Необходимо сделать *.so библиотеку для линухов. Юзаю eclipse luna 4.4.2
После сборки библиотеки функции меняют свое имя.
LIBRARYTest.h
#define DLL_EXPORT __attribute__((visibility("default")))
extern "C" DLL_EXPORT int getVersion();
Test.cpp
#include "Test.h"
DLL_EXPORT int getVersion(int a) {
return a;
}
EXECUTABLE
#include <iostream>
#include <dlfcn.h>
extern "C" typedef int (*foo_t)(int);
foo_t foo = NULL;
using namespace std;
int main() {
void* lib = dlopen("libTestLib.so", RTLD_LAZY);
if(!lib)
{
cout << "Cannot load library: " << dlerror() << endl;
return 0;
}
dlerror();
foo = (foo_t) dlsym(lib, "getVersion"); // foo == 0
foo = (foo_t) dlsym(lib, "_Z10getVersioni"); // валидное имя фун
int i = foo(2);
cout<<"i="<<i<<endl;
return 0;
}
имя функции в полученной библиотеке смотрю с помощью
nm -DУже пробовал юзать *.def файл:
LIBRARY libTestLib
EXPORTS
getVersion
подключаю его в Cross G++ Linker -> Shared Library Settings -> DEF file name. Но при линковке
g++ -L/home/user/eclipse/workspace/TestLib/src -shared -Wl,--output-def=Test.def -o libTestLib.so src/Test.o
/usr/bin/ld: unrecognized option '--output-def=Test.def'
в чем может быть проблема? чего еще не хватает, чтобы использовать неисковерканные имена функций из библиотеки?