autotools/libtool 共享库未安装
autotools/libtool shared library not installed
也许有一些我不知道的非常基本的东西,但我正面临一个非常奇怪的行为:正确构建我的 libtool 共享库后,它会立即被删除。
基本上,这个 Makefile.am
:
ACLOCAL_AMFLAGS = -I m4 --install
lib_LTLIBRARIES =
if BUILD_WIRINGPI_STUB
lib_LTLIBRARIES += libwiringPiStub.la
# headers to be installed
include_HEADERS = \
src/wiringPi-stub/wiringPi.h
endif
LIBTOOL_DEPS = @LIBTOOL_DEPS@
# libwiringPiStub.{so,a}
libwiringPiStub_la_LDFLAGS = -rpath '$(libdir)' -version-info $(WIRINGPI_STUB_SOVERSION)
libwiringPiStub_la_SOURCES = src/wiringPi-stub/wiringPi.c
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = src/wiringPi-stub/libwiringPiStub.pc
生成此构建历史记录,看起来不错:
% make libwiringPiStub.la
depbase=`echo src/wiringPi-stub/wiringPi.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -g -O2 -MT src/wiringPi-stub/wiringPi.lo -MD -MP -MF $depbase.Tpo -c -o src/wiringPi-stub/wiringPi.lo src/wiringPi-stub/wiringPi.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile: gcc -DHAVE_CONFIG_H -I. -g -O2 -MT src/wiringPi-stub/wiringPi.lo -MD -MP -MF src/wiringPi-stub/.deps/wiringPi.Tpo -c src/wiringPi-stub/wiringPi.c -fno-common -DPIC -o src/wiringPi-stub/.libs/wiringPi.o
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -rpath '/usr/local/lib' -version-info 1:0:0 -o libwiringPiStub.la src/wiringPi-stub/wiringPi.lo -lpthread -lm
libtool: link: gcc -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libwiringPiStub.1.dylib src/wiringPi-stub/.libs/wiringPi.o -lpthread -lm -g -O2 -install_name /usr/local/lib/libwiringPiStub.1.dylib -compatibility_version 2 -current_version 2.0 -Wl,-single_module
libtool: link: (cd ".libs" && rm -f "libwiringPiStub.dylib" && ln -s "libwiringPiStub.1.dylib" "libwiringPiStub.dylib")
libtool: link: ( cd ".libs" && rm -f "libwiringPiStub.la" && ln -s "../libwiringPiStub.la" "libwiringPiStub.la" )
事实上,我的 $(libdir) 中没有安装任何东西 make install
,或者是 include 目录中的头文件。
这是 make install
执行的输出:
% make install
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
/usr/local/bin/gmkdir -p '/usr/local/lib/pkgconfig'
/usr/local/bin/ginstall -c -m 644 src/wiringPi-stub/libwiringPiStub.pc '/usr/local/lib/pkgconfig'
实际上只有.pc文件被实际移动到位了。我可以尝试解决这个问题吗?
所提供的 Automake 输入文件似乎没有任何内在错误,目标 libwiringPiStub.la
可以通过明确请求 make libwiringPiStub.la
来构建这一事实倾向于支持该结论。
同时,make install
甚至没有尝试安装库或关联的 header 就成功完成这一事实强烈表明项目配置导致它们未包含在值中lib_LTLIBRARIES
和 include_HEADERS
变量。在 configure
时,BUILD_WIRINGPI_STUB
Automake 条件评估为 false 时自然会出现这种情况,但我认为没有理由认为如果该条件评估为真,同样的情况会发生。因此,这就是我希望您能找到问题的地方。
您可以通过查看生成的 Makefile
来验证条件是否负责。条件的 body 将以任何一种方式出现在 Makefile 中,但如果条件的计算结果为假,则它将被注释掉。
也许有一些我不知道的非常基本的东西,但我正面临一个非常奇怪的行为:正确构建我的 libtool 共享库后,它会立即被删除。
基本上,这个 Makefile.am
:
ACLOCAL_AMFLAGS = -I m4 --install
lib_LTLIBRARIES =
if BUILD_WIRINGPI_STUB
lib_LTLIBRARIES += libwiringPiStub.la
# headers to be installed
include_HEADERS = \
src/wiringPi-stub/wiringPi.h
endif
LIBTOOL_DEPS = @LIBTOOL_DEPS@
# libwiringPiStub.{so,a}
libwiringPiStub_la_LDFLAGS = -rpath '$(libdir)' -version-info $(WIRINGPI_STUB_SOVERSION)
libwiringPiStub_la_SOURCES = src/wiringPi-stub/wiringPi.c
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = src/wiringPi-stub/libwiringPiStub.pc
生成此构建历史记录,看起来不错:
% make libwiringPiStub.la
depbase=`echo src/wiringPi-stub/wiringPi.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -g -O2 -MT src/wiringPi-stub/wiringPi.lo -MD -MP -MF $depbase.Tpo -c -o src/wiringPi-stub/wiringPi.lo src/wiringPi-stub/wiringPi.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile: gcc -DHAVE_CONFIG_H -I. -g -O2 -MT src/wiringPi-stub/wiringPi.lo -MD -MP -MF src/wiringPi-stub/.deps/wiringPi.Tpo -c src/wiringPi-stub/wiringPi.c -fno-common -DPIC -o src/wiringPi-stub/.libs/wiringPi.o
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -rpath '/usr/local/lib' -version-info 1:0:0 -o libwiringPiStub.la src/wiringPi-stub/wiringPi.lo -lpthread -lm
libtool: link: gcc -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libwiringPiStub.1.dylib src/wiringPi-stub/.libs/wiringPi.o -lpthread -lm -g -O2 -install_name /usr/local/lib/libwiringPiStub.1.dylib -compatibility_version 2 -current_version 2.0 -Wl,-single_module
libtool: link: (cd ".libs" && rm -f "libwiringPiStub.dylib" && ln -s "libwiringPiStub.1.dylib" "libwiringPiStub.dylib")
libtool: link: ( cd ".libs" && rm -f "libwiringPiStub.la" && ln -s "../libwiringPiStub.la" "libwiringPiStub.la" )
事实上,我的 $(libdir) 中没有安装任何东西 make install
,或者是 include 目录中的头文件。
这是 make install
执行的输出:
% make install
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
/usr/local/bin/gmkdir -p '/usr/local/lib/pkgconfig'
/usr/local/bin/ginstall -c -m 644 src/wiringPi-stub/libwiringPiStub.pc '/usr/local/lib/pkgconfig'
实际上只有.pc文件被实际移动到位了。我可以尝试解决这个问题吗?
所提供的 Automake 输入文件似乎没有任何内在错误,目标 libwiringPiStub.la
可以通过明确请求 make libwiringPiStub.la
来构建这一事实倾向于支持该结论。
同时,make install
甚至没有尝试安装库或关联的 header 就成功完成这一事实强烈表明项目配置导致它们未包含在值中lib_LTLIBRARIES
和 include_HEADERS
变量。在 configure
时,BUILD_WIRINGPI_STUB
Automake 条件评估为 false 时自然会出现这种情况,但我认为没有理由认为如果该条件评估为真,同样的情况会发生。因此,这就是我希望您能找到问题的地方。
您可以通过查看生成的 Makefile
来验证条件是否负责。条件的 body 将以任何一种方式出现在 Makefile 中,但如果条件的计算结果为假,则它将被注释掉。