标签: libtool

Libtool认为"图书馆被移动"但事实并非如此

我目前正在从源代码重新编译gtk +和依赖项(我没有其他选择).

我的所有自定义软件包都安装在一个特定的自定义点(让我们称之为/packages)(它看起来很奇怪,但这一次,我别无选择).

当我尝试重新编译pango时,它需要freetype.Freetype的已安装/packages/freetype/2.1.10/amd64-linux (LIB,包括......在此目录)和不同的配置路径设置(LD_LIBRARY_PATH,LIBRARY_PATH,CPLUS_INCLUDE_PATH,INCLUDE_PATH,PKG_CONFIG_PATH).pango配置运行良好.它找到freetype并生成Makefile.当我尝试制作时,我收到以下错误:

libtool: link: warning: library `/packages/freetype/2.1.10/amd64-linux//lib/libfreetype.la' was moved.
grep: /usr/local/lib/libfreetype.la: No such file or directory
Run Code Online (Sandbox Code Playgroud)

libtool我的lib有问题(但libfreetype.la存在于目录中,/packages/freetype/2.1.10/amd64-linux//lib/并且没有访问问题).所以libtool试图在"经典地方"中/usr/...找到它并且找不到它.

一开始,我认为libtool与两个斜杠混淆(可能是由于在编译freetype期间--prefix标志中的错误)所以我确实重新编译了没有拼写错误的freetype但它没有改变任何东西.

有人有意帮助我吗?我以前从未在我的个人项目中使用过libtool所以我不知道是否有办法解决这种奇怪的行为...(这可能无关紧要,但libtool是版本1.5.22)

提前致谢.

gtk x86-64 pango freetype libtool

10
推荐指数
1
解决办法
8890
查看次数

如何在Automake和libtool使用项目中构建*.so模块?

我和其他人有同样的问题:

  • 我在Automake项目中有一个*.lalibtool生成的文件(例如),module.la
  • 但是我需要把*.so它用于dlopen()(例如module.so).

但是:项目已配置和构建,--disable-shared以确保创建的主二进制文件是一个大的静态链接程序,例如main.x(更容易部署和调试).因此*.so不会创建文件.

该程序main.x是一个巨大的框架式应用程序,它能够通过加载扩展(模块)dlopen()- 尽管它是静态链接的.

当我module.so手工构建时,这很好用.但是这Makefile.am对我来说似乎是不可能的.是的,我可以写lib_LTLIBRARIES,但按照我的标准,--disable-shared我没有得到*.so文件.

lib_LTLIBRARIES = module.la
module_so_SOURCES = module.cpp
Run Code Online (Sandbox Code Playgroud)

module.la创建文件,dlopen()拒绝加载(当然).

我试图将规则用于Makefile.am手动构建它并且有效:

# Makefile.am (yes, .am)
all: mm_cpp_logger.so

SUFFIXES = .so

%.so: %.cpp
    $(CXX) $(CXXFLAGS) -fPIC -fpic -c -I $(top_srcdir)/include -o $@  $<

%.so: %.o
    $(CXX) …
Run Code Online (Sandbox Code Playgroud)

automake shared-libraries libtool

10
推荐指数
1
解决办法
1万
查看次数

使用Autotools预编译的头文件

是否可以在使用automake/libtool的项目中使用gcc预编译头文件?

添加新的make规则来构建预编译头文件并不困难.问题是你还必须添加由libtool和AFAIK引入的编译标志,它无法处理标头输入文件.

你怎么能这样做?

automake autoconf autotools precompiled-headers libtool

9
推荐指数
1
解决办法
1959
查看次数

如何使用libtool创建二进制文件和.so

我有一组cpp文件,我想直接编译成二进制文件,并编译成共享库.

我有

bin_PROGRAMS=mybin
lib_LTLIBRARIES=libmylib.la

COMMON_SOURCES=f1.cpp f2.cpp f3.cpp

mybin_SOURCES=main.cpp $(COMMON_SOURCES)
libmylib_la_SOURCES=$(COMMON_SOURCES)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,cpp文件被编译两次,一次使用libtool,一次没有,有时libtool/automake抱怨

Makefile.am: object `f1.$(OBJEXT)' created both with libtool and without`
Run Code Online (Sandbox Code Playgroud)

我尝试将COMMON_SOURCES放入.a文件中,但是当我将.a与.la链接时,libtool会抱怨(说它不可移植).

我需要的是类似的东西

bin_LTPROGRAMS=mybin
Run Code Online (Sandbox Code Playgroud)

但那并不存在

编辑:澄清 - 我正在使用automake/autoconf.我上面展示的是我的automake Makefile.am的内容

c++ automake autoconf gcc libtool

9
推荐指数
2
解决办法
9340
查看次数

如何使用libtool从一堆静态库中创建静态库

我有大约80个静态库.我想从中创建一个静态库.

这个答案对我不起作用,因为我收到以下错误:

libtool: unrecognized option `-static'
Run Code Online (Sandbox Code Playgroud)

我也很困惑它需要在哪种模式下完成.是"链接"还是"安装"因为有20个奇数库,我还能用"*"来指定所有吗?

我没有在文件中找到任何信息,期望不能真正回答我的问题.

FYI ..这些是模式:

MODE must be one of the following:

      clean           remove files from the build directory
      compile         compile a source file into a libtool object
      execute         automatically set library path, then run a program
      finish          complete the installation of libtool libraries
      install         install libraries or executables
      link            create a library or an executable
      uninstall       remove libraries from an installed directory
Run Code Online (Sandbox Code Playgroud)

c libtool

8
推荐指数
1
解决办法
5591
查看次数

Libtool为对象添加前缀,但gcov要求它们没有前缀

我需要gcov在我正在处理的共享库上执行一些测试覆盖.

问题是libtool将目标文件重命名为my-name.c,libmylib_la-my-name.lo并且gcov无法处理该转换.每次运行它时,cannot open notes file都会生成错误.

如果我手动重命名my-name.clibmylib_la-my-name.c后构建gcov工作正常,所以没有其他问题,除了文件名截断.

附录

试图提供一个最小的工作示例,我发现文件名修改只在lib..._la_CFLAGS设置时(以及设置为空值时)发生.

cat <<EOT > configure.ac
AC_INIT(sample,0.0.1)
AC_CONFIG_SRCDIR(configure.ac)
AM_INIT_AUTOMAKE(foreign)
LT_INIT
AC_PROG_CC
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
EOT

cat <<EOT > Makefile.am
lib_LTLIBRARIES=libsample.la
libsample_la_SOURCES=sample.c
# The following line triggers the filename mangling (libsample_la-sample.lo instead of sample.lo)
libsample_la_CFLAGS=
EOT

touch sample.c && autoreconf -if && ./configure && make
Run Code Online (Sandbox Code Playgroud)

有没有办法避免libtool操作的文件名修改或让我们gcov理解文件名修改方案?

c gcc autotools libtool gcov

8
推荐指数
1
解决办法
708
查看次数

有什么方法可以将libtool“.la”文件与cmake“target_link_libraries”一起使用

在将库集成到我的 cmake 项目中时,我一直在将库的 .la 文件中的“dependency_libs”复制粘贴到变量中,然后使用“target_link_library”。

我需要以某种方式直接从 .la 文件中获取这个“dependency_libs”变量。有没有办法在 cmake 中做到这一点?如果没有,我总是可以用其他语言编写脚本来使用正则表达式解析文件,然后将其写入文件并将其导入变量。

cmake libtool

8
推荐指数
1
解决办法
375
查看次数

可能未定义的宏:AC_PROG_LIBTOOL

我想构建protobuf,所以我只是在目录中克隆包和cd。当我输入 ./autogen.sh 时,发生了一些错误。 当我输入 ./autogen.sh 时, 我收到回调:

configure.ac:104: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /home/zhangxl/my/autoconf/bin/autoconf failed with exit status: 1
Run Code Online (Sandbox Code Playgroud)

有人说我应该安装 libtool,但我已经安装了 autoconf、automake、libtool 和 m4,但它们都是从源代码构建的,因为我无法获得 sudo 密码。 在此处输入图像描述 这是我的 .bashrc 文件:

export PATH=$PATH:/home/zhangxl/my/libtool/bin
export CPLUS_INCLUDE_PATH=/hpme/zhangxl/my/libtool/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/home/zhangxl/my/libtool/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/zhangxl/my/libtool/lib:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

我想可能 .bashrc 文件不正确,所以我想寻求帮助,非常感谢您的回答。

linux autotools libtool

8
推荐指数
3
解决办法
1万
查看次数

LTLIBRARIES:mv*.Tpo*.Plo,但前者不存在而后者已经存在

我正在将现有库(libtcod)直接转换为Autotools(用于OS X幸福).不幸的是,当我改变我Makefile.amlib_LIBRARIES规则时lib_LTLIBRARIES,构建从成功转为un.摘录自以下输出:

Making all in .
make[1]: Nothing to be done for `all-am'.
Making all in src
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -g -O2 -MT bresenham_c.lo -MD -MP -MF .deps/bresenham_c.Tpo -c -o bresenham_c.lo bresenham_c.c
mv -f .deps/bresenham_c.Tpo .deps/bresenham_c.Plo
mv: rename .deps/bresenham_c.Tpo to .deps/bresenham_c.Plo: No such file or directory
make[1]: *** [bresenham_c.lo] Error 1
make: *** [all-recursive] Error 1
Run Code Online (Sandbox Code Playgroud)

src/Makefile.am 看起来像这样:

lib_LTLIBRARIES = libtcod.la
libtcod_la_SOURCES = bresenham_c.c bresenham3_c.c bsp_c.c color_c.c ...
Run Code Online (Sandbox Code Playgroud)

src/.deps 包含: …

macos automake autotools libtool

7
推荐指数
1
解决办法
3442
查看次数

什么是`relinking`警告?

在编译时mpich,我收到了一些relinking警告......

libtool: warning: relinking 'lib/libmpicxx.la'
Run Code Online (Sandbox Code Playgroud)

我无法通过Google搜索错误消息找出这些含义.什么是relinking?为什么会引起它,我怎么能摆脱它呢?

linker compilation build libtool

7
推荐指数
1
解决办法
5645
查看次数