Пока я пытаюсь настроить свой код на Linux Linux VM.Библиотека была установлена правильно, и я мог ссылаться на нее и работать с кодом Си.Тем не менее, пока я пытаюсь скомпилировать его в общую библиотеку, которая будет использоваться Python ctypes.Компиляция не была успешной, как я сделал на MacOS.После компиляции я запустил код на python, и это сразу дало ошибку сегментации.Кто-нибудь сталкивался с такой же проблемой и знает, как это исправить?
Вот как я компилирую:
gcc -nostartfiles -o vrf.o -I/home/Data/libsodium/include -L/home/Data/libsodium/lib vrf.c
gcc -shared -fPIC -I/home/Data/libsodium/include -fPIC /home/Data/libsodium/lib/libsodium.a -L/home/Data/libsodium/lib -o vrf.so vrf.c
Я пытался скомпилировать оба файла из .c или .o файла, но все не удалось.Ссылка заключалась в том, чтобы связать библиотеку со ссылкой в установленном месте на /home/Data/libsodium
. Пока я компилирую ее в исполняемый файл .o
, linux выдает ошибку
/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Затем я добавил -nostartfiles
, что вызвало еще однупредупреждение при компиляции в разделяемую библиотеку
warning: Cannot create .eh_frame_hdr section, --eh-frame-hdr ignored.
/usr/bin/ld: error in vrf.o(.eh_frame); no .eh_frame_hdr table will be created
Единственное отличие состоит в том, что на mac общая библиотека связана со статическим файлом .a, в то время как на linux я пробовал такую же компиляцию, но она не удалась.