Это код для тестовой динамической библиотеки ".so", которую я создаю.< /p>
Код: Выделить всё
class InternalClass
{
public:
int Function(){ return 10; }
};
extern "C"
{
int WrapperFunctionSimple() { return 10; }
void WrapperCreateInstance() {InternalClass* item = new InternalClass(); delete item; }
}
Код: Выделить всё
g++ -Wall -fexceptions -O2 -c /home/lidia/compartida/TestLibrary/TestLibrary/main.cpp -o obj/Release/main.o
g++ -shared obj/Release/main.o -o bin/Release/libTestLibrary.so -s
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: obj/Release/main.o: warning: relocation against `_Znwm@@GLIBCXX_3.4' in read-only section `.text'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: obj/Release/main.o: relocation R_X86_64_PC32 against symbol `_Znwm@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Код: Выделить всё
void WrapperCreateInstance() {InternalClass* item = new InternalClass(); delete item; }
Я использую VirtualBox. Я установил OpenSUSE 64bit, приложение, использующее библиотеку, тоже 64bit. В другом дистрибутиве Linux (Mint) с точно таким же проектом и настройками (без fPIC) его можно скомпилировать. Когда я использую эту библиотеку (.so), она работает в SUSE.
Я также использую:
- gcc (SUSE Linux) 7.5.0
- g++ (SUSE Linux) 7.5.0
- Моя среда разработки — Code::Blocks 20 (последняя версия). В настройках пусто, кроме флага -m64.
РЕДАКТИРОВАТЬ:
Чтобы добавить больше информации, это можно скомпилировать в Ubuntu с теми же настройками. Нет в SUSE
Подробнее здесь: https://stackoverflow.com/questions/654 ... r-linux-se
Мобильная версия