gpt4 book ai didi

c - 将库添加到 autotools 文件不起作用(链接器忽略它)

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:22 24 4
gpt4 key购买 nike

我对 C 构建工具一窍不通,所以我有一个分支项目,我想在其中添加一个动态链接库:

https://github.com/iem-projects/ncview/tree/26c3549d165dc6047dc37db252062fd73eb9282c

基本上,我需要的是包含liblo。该项目的现有库(例如 netcdf)正在发生各种巫术。

我正在尝试关注 this manual基本上就是说,我应该向 configure.inMakefile.am 添加内容,然后运行 ​​autoreconfautoconfautomake,然后是 ./configure,最后是 make

这是我添加到 configure.in 中的:

# OSC support
PKG_CHECK_MODULES(LIBLO, liblo >= 0.26)

这是我添加到 Makefile.am 中的:

bin_PROGRAMS = ncview

ncview_LDADD = $(LIBLO_LIBS)

现在 configure 至少成功地检查了那个库:

checking for LIBLO... yes

但是 make 似乎没有包含带有链接器的库:

$ make
make all-recursive
Making all in src
/usr/bin/gcc-4.2 -I/usr/X11/include -g -O2 -L/opt/local/lib -lnetcdf -lSM -lICE \
-L/usr/X11/lib -R/usr/X11/lib -lX11 -L/usr/X11/lib -R/usr/X11/lib -Wl,-rpath, -o \
ncview ncview.o file.o util.o do_buttons.o file_netcdf.o view.o do_print.o \
epic_time.o interface.o x_interface.o dataedit.o display_info.o plot_xy.o utils.o \
range.o printer_options.o overlay.o filesel.o set_options.o plot_range.o udu.o \
SciPlot.o RadioWidget.o cbar.o utCalendar2_cal.o calcalcs.o colormap_funcs.o \
make_tc_data.o stringlist.o handle_rc_file.o -lm -L/opt/local/lib -lnetcdf -lXaw \
-lXt -L/usr/X11/lib -R/usr/X11/lib -lSM -lICE -L/usr/X11/lib -R/usr/X11/lib -lX11 \
-L/usr/X11/lib -R/usr/X11/lib -lpng

Undefined symbols:
"_lo_address_new", referenced from:
_main in ncview.o
"_lo_send_internal", referenced from:
_main in ncview.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

因此它链接了旧库(netcdfX11),但没有选择我添加的库(liblo)

整个 makefile 业务对我来说都是黑魔法,因此欢迎提供有关为什么库未链接的任何线索。


解决方案:

AC_SUBST 的提示,并再次仔细查看其他库的集成方式,我设法使其正常工作。无需向 Makefile.am 添加任何内容。在 configure.in(又名 configure.ac)中,添加了以下内容:

# OSC support
PKG_CHECK_MODULES(LIBLO, liblo >= 0.26)
LIBSsave=$LIBS
CFLAGSsave=$CFLAGS
CFLAGS=$LIBLO_CFLAGS
LIBS=$LIBLO_LIBS
# AC_MSG_CHECKING([for liblo OSC library])
# AC_MSG_RESULT()
# AC_CHECK_LIB(LIBLO,lo_address_new,[],[libloWorks=no])
echo "liblo OSC library: $LIBLO_LIBS"
AC_SUBST(LIBLO_CFLAGS) # si?
AC_SUBST(LIBLO_LIBS)
LIBS+=$LIBSsave
CFLAGS+=$CFLAGSsave

最佳答案

PKG_CHECK_MODULES 之后,应该定义变量 LIBIO_CFLAGSLIBIO_LIBS。此时,你应该添加:

AC_SUBST(LIBIO_CFLAGS)
AC_SUBST(LIBIO_LIBS)

configure.ac 文件。 Makefile.am 然后需要使用这些替换:

ncview_CPPFLAGS = $(LIBIO_CFLAGS)
ncview_LDADD = $(LIBIO_LIBS)

关于c - 将库添加到 autotools 文件不起作用(链接器忽略它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com