0

私は C ビルド ツールに関してダミーなので、動的にリンクされたライブラリを追加したいフォークされたプロジェクトがあります。

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

基本的に、必要なのは を含めることlibloです。プロジェクトの既存のライブラリに対しては、あらゆる種類のブードゥー教が行われています (netcdfたとえば)。

私はこのマニュアルconfigure.inに従おうとしています。基本的には、 andに何かを追加し、 、、および、そして 最後にMakefile.amを実行する必要があります。autoreconfautoconfautomake./configuremake

これに追加しました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

したがって、古いライブラリ ( netcdf、 ) はリンクされますが、追加したライブラリ ( )X11は取得されません。liblo

この makefile ビジネス全体は私にとって黒魔術なので、ライブラリがリンクされない理由の手がかりは大歓迎です。


解決策:

のヒントAC_SUBST、および他のライブラリが統合された方法をもう一度詳しく見てみると、なんとか機能させることができました。に何も追加する必要はありませんでしたMakefile.am。( configure.inaka 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
4

2 に答える 2

2

の後PKG_CHECK_MODULES、変数LIBIO_CFLAGSおよびLIBIO_LIBSを定義する必要があります。この時点で、次を追加する必要があります。

AC_SUBST(LIBIO_CFLAGS)
AC_SUBST(LIBIO_LIBS)

configure.acファイルに。次にMakefile.am、これらの置換を利用する必要があります。

ncview_CPPFLAGS = $(LIBIO_CFLAGS)
ncview_LDADD = $(LIBIO_LIBS)
于 2013-01-18T13:45:53.380 に答える
1

次のような構文で LIBLO フラグの値を直接置き換えることもできます。

configure.ac:

  PKG_CHECK_MODULES(LIBLO, liblo >= 0.26)

Makefile.am:

  ncview_LDADD += @LIBLO_LIBS@

また、LDADD の以前の値を上書きしないように注意する必要があります (またはその逆で、値が上書きされます)。

  ncview_LDADD = @LIBLO_LIBS@
  ncview_LDADD = -lm

@LIBLO_LIBS@ は効果がありません。

于 2013-01-18T14:09:56.097 に答える