Отключить декорирование имен в библиотеке (linux)

zladeyka
Дата: 27.04.2015 18:18:52
Необходимо сделать *.so библиотеку для линухов. Юзаю eclipse luna 4.4.2

После сборки библиотеки функции меняют свое имя.

LIBRARY

Test.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'

в чем может быть проблема? чего еще не хватает, чтобы использовать неисковерканные имена функций из библиотеки?
Dimitry Sibiryakov
Дата: 27.04.2015 18:38:03

extern "C" в Test.cpp добавь.

Posted via ActualForum NNTP Server 1.5

zladeyka
Дата: 27.04.2015 20:51:37
Dimitry Sibiryakov,

Спасибо, помогло.