Я чрезвычайно новичок в использовании Makefile и autoconf. Я использую библиотеку изображений Camellia и пытаюсь статически связать свой код с их библиотеками. Когда я запускаю «make» в библиотеке изображений Camellia, я получаю файлы libCamellia.a, .so, .la и .so.0.0.0 внутри каталога/usr/local/lib. Это команда, которую я использовать для компиляции моего кода с их библиотеками:configure.in: AM_DISABLE_SHARED не меняет мой файл Makefile
gcc -L/usr/local/lib -lCamellia -o myprogram myprogram.c
Это работает отлично, но когда я пытаюсь статически, это то, что я получаю:
gcc -static -L/usr/local/lib -lCamellia -o myprogram myprogram.c
/tmp/cck0pw70.o: In function `main':
myprogram.c:(.text+0x23): undefined reference to `camLoadPGM'
myprogram.c:(.text+0x55): undefined reference to `camAllocateImage'
myprogram.c:(.text+0x97): undefined reference to `camZoom2x'
myprogram.c:(.text+0x104): undefined reference to `camSavePGM'
collect2: ld returned 1 exit status
Я хочу статически потому что я пытаюсь изменить исходный код Camellia, и я хочу сравнить свою версию с их версией. Поэтому после некоторых поисковых запросов я попытался добавить AM_DISABLE_SHARED в файл configure.in. Но после запуска ./configure, я все равно получаю то же самое Makefile. После того, как я «сделаю установку», я все равно получаю те же результаты выше.
Что такое простой способ получить две версии моего кода, один с исходным исходным кодом Camellia и один с моей модифицированной версией? Я думаю, что статические библиотеки должны работать. Есть простой способ заставить статические библиотеки работать или есть другие простые решения моей проблемы? Я просто не хочу повторно «делать» и «устанавливать установку» каждый раз, когда хочу сравнить свою версию с оригиналом.
Для пакетов, использующих libtool, это './configure --disable-shared', а не' --disable-dynamic'. –