【问题标题】:Autotools adds library flags to arAutotools 将库标志添加到 ar
【发布时间】:2016-10-09 00:08:53
【问题描述】:

我目前正在移植我的 C++ 项目以使用 GNU 自动工具工具链,但我在设置我的库依赖项时遇到了麻烦。似乎正在发生的事情是它提供了用于 g++ 的命令 ar 标志,例如 -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2

这是src/Makefile.am的代码:

noinst_LIBRARIES = libccade.a
libccade_a_SOURCES = CCade.h CCade_graphics.h CCade_graphics.cpp CCade_util.h CCade_util.cpp
libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
libccade_a_CFLAGS = $(libsdl2_CFLAGS) $(libsdl2_image_CFLAGS)

这是make 发布的内容:

ar cru libccade.a CCade_graphics.o CCade_util.o -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2
ar: invalid option -- 'L'
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
...(more documentation on ar)...

似乎是从libccade_a_LIBADD 添加参数,但如果我删除该变量,那么它不会将标志提供给g++。我该怎么办?

【问题讨论】:

    标签: c++ shared-libraries autotools


    【解决方案1】:

    您似乎没有使用libtool。我通常做的是把它放在我的configure.ac

    AM_PROG_LIBTOOL
    

    然后我的Makefile.am 会是这样的:

    noinst_HEADERS = CCade.h CCade_graphics.h CCade_util.h
    
    noinst_LTLIBRARIES = libccade.la
    
    libccade_la_SOURCES = CCade_graphics.cpp CCade_util.cpp
    libccade_la_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
    libccade_la_CPPFLAGS = $(libsdl2_CFLAGS) $(libsdl2_image_CFLAGS)
    

    确保第二个变量是 noinst_LTLIBRARIES,它应该适合您。

    【讨论】:

    • 我尝试按照您的解决方案进行操作,虽然我相信我更接近了一步,但我仍然遇到同样的错误。
    • @MathManiac 你是用我的代码替换你的代码还是你的代码还在里面?
    • 编辑: 等等.. 我意识到您在第二个变量上添加了“LT”。现在改变它..
    【解决方案2】:

    你希望这条线做什么?:

    libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
    

    ar 不做任何链接,它不关心其他库,所以这里不需要指定它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多