将静态库(potracelib)与另一个库链接,在Makefile.am中写什么?
Linking static lib (potracelib) with another lib, what to write in Makefile.am?
我需要 link libpotrace 并将其编译成 libgerbv。 Makefile.am 应该写什么?我尝试了各种方法,如 LDADD、LIBDIR、LDFLAGS 等,但没有成功。
我的结构是什么样的:
- gerbv/gerbv-test -> 来自 git 的文件,master brach
- gerbv/libs/potrace/potrace-test -> potrace -> 来自 sourceforge.com 的文件,最新版本
我用的是Debian Jessie,我可以分别编译这两个程序,我都没有弄清楚,我怎么link potrace到gerbv并编译它。头文件 (.h) 已正确包含,但我没有成功使用 linking .so 或 .a/la lib。即使在 /usr/local/lib 或 /usr/lib.
中安装 potrace 也没有成功
谁能指导我?最好的是,如果你可以下载这两个程序,编译它没有错误,然后将你放入的内容写入 gerbv/src/makefile.Am.
已更新
我下载了干净的版本并只做了这个修改:
- /root/NBP/gerbv/gerbv-test/src/Makefile.am
已添加
libgerbv_la_LIBADD = libpotrace.la # src/Makefile.am:84: error: use 'libgerbv_la_LIBADD', not 'libgerbv_la_LDADD'
libgerbv_la_LIBDIR = /root/NBP/gerbv/libs/potrace/potrace-old/src/.libs
#libgerbv_la_DEPENDENCIES = libpotrace.la
- /root/NBP/gerbv/gerbv-test/src/exportimage.c
添加到顶部
#include "../../libs/potrace/potrace-test/src/potracelib.h"
添加到 void exportimage_render_to_surface_and_destroy(...) 中,这将测试共享库是否正确 linked。 exportimage.c 是 libgerbv 的一部分,我需要在其中包含 libpotrace。
char *v = potrace_version();
进行此修改后,我通过以下方式构建它:
- libpotrace
root:~/NBP/gerbv/libs/potrace/potrace-test# autoreconf && ./configure --with-libpotrace && make
运行没有问题...
- gerbv/libgerbv
root:~/NBP/gerbv/gerbv-test# autoreconf && ./configure && make
结果为:
...
make[3]: Entering directory '/root/NBP/gerbv/gerbv-test/src'
make[3]: *** No rule to make target 'libpotrace.la', needed by 'libgerbv.la'. Stop.
make[3]: Leaving directory '/root/NBP/gerbv/gerbv-test/src'
Makefile:498: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/root/NBP/gerbv/gerbv-test/src'
Makefile:472: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/root/NBP/gerbv/gerbv-test'
Makefile:401: recipe for target 'all' failed
make: *** [all] Error 2
解决了这个 Makefile.am 添加:
libgerbv_la_LIBADD = ../../libs/potrace/potrace/src/libpotrace.la
libgerbv_la_DEPENDENCIES = ../../libs/potrace/potrace/src/libpotrace.la
我需要 link libpotrace 并将其编译成 libgerbv。 Makefile.am 应该写什么?我尝试了各种方法,如 LDADD、LIBDIR、LDFLAGS 等,但没有成功。
我的结构是什么样的:
- gerbv/gerbv-test -> 来自 git 的文件,master brach
- gerbv/libs/potrace/potrace-test -> potrace -> 来自 sourceforge.com 的文件,最新版本
我用的是Debian Jessie,我可以分别编译这两个程序,我都没有弄清楚,我怎么link potrace到gerbv并编译它。头文件 (.h) 已正确包含,但我没有成功使用 linking .so 或 .a/la lib。即使在 /usr/local/lib 或 /usr/lib.
中安装 potrace 也没有成功谁能指导我?最好的是,如果你可以下载这两个程序,编译它没有错误,然后将你放入的内容写入 gerbv/src/makefile.Am.
已更新
我下载了干净的版本并只做了这个修改:
- /root/NBP/gerbv/gerbv-test/src/Makefile.am
已添加
libgerbv_la_LIBADD = libpotrace.la # src/Makefile.am:84: error: use 'libgerbv_la_LIBADD', not 'libgerbv_la_LDADD'
libgerbv_la_LIBDIR = /root/NBP/gerbv/libs/potrace/potrace-old/src/.libs
#libgerbv_la_DEPENDENCIES = libpotrace.la
- /root/NBP/gerbv/gerbv-test/src/exportimage.c
添加到顶部
#include "../../libs/potrace/potrace-test/src/potracelib.h"
添加到 void exportimage_render_to_surface_and_destroy(...) 中,这将测试共享库是否正确 linked。 exportimage.c 是 libgerbv 的一部分,我需要在其中包含 libpotrace。
char *v = potrace_version();
进行此修改后,我通过以下方式构建它:
- libpotrace
root:~/NBP/gerbv/libs/potrace/potrace-test# autoreconf && ./configure --with-libpotrace && make
运行没有问题...
- gerbv/libgerbv
root:~/NBP/gerbv/gerbv-test# autoreconf && ./configure && make
结果为:
...
make[3]: Entering directory '/root/NBP/gerbv/gerbv-test/src'
make[3]: *** No rule to make target 'libpotrace.la', needed by 'libgerbv.la'. Stop.
make[3]: Leaving directory '/root/NBP/gerbv/gerbv-test/src'
Makefile:498: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/root/NBP/gerbv/gerbv-test/src'
Makefile:472: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/root/NBP/gerbv/gerbv-test'
Makefile:401: recipe for target 'all' failed
make: *** [all] Error 2
解决了这个 Makefile.am 添加:
libgerbv_la_LIBADD = ../../libs/potrace/potrace/src/libpotrace.la
libgerbv_la_DEPENDENCIES = ../../libs/potrace/potrace/src/libpotrace.la