【发布时间】:2010-05-15 20:38:38
【问题描述】:
我对使用 Makefile 和 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。在我“make install”之后,我仍然得到与上面相同的结果。
有什么简单的方法可以获得两个版本的代码,一个是原始 Camellia 源代码的编译版本,一个是我修改后的版本?我认为静态库应该可以工作。有一种简单的方法可以让静态库正常工作,还是有其他简单的解决方案可以解决我的问题?我只是不想每次想将我的版本与原始版本进行比较时都重新“制作”和重新“制作安装”。
【问题讨论】:
标签: makefile static-libraries static-linking configure autoconf