我对使用 Makefiles 和 autoconf 非常陌生。我正在使用 Camellia 图像库并尝试将我的代码与他们的库静态链接。当我在 Camellia 图像库上运行“make”时,我在 /usr/local/lib 目录中获得了 libCamellia.a、.so、.la 和 .so.0.0.0 文件。这是我用来用他们的库编译我的代码的命令:
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 源代码编译,一个带有我的修改版本?我认为静态库应该可以工作。有一种简单的方法可以让静态库正常工作,还是有其他简单的解决方案可以解决我的问题?每次我想将我的版本与原始版本进行比较时,我只是不想重新“制作”和重新“制作安装”。