【问题标题】:Make interprets compiler options as shell commandMake 将编译器选项解释为 shell 命令
【发布时间】:2017-07-02 17:28:01
【问题描述】:

我正在尝试使用自动工具在 Tiny Core Linux 下编译 fbsplash。在编译过程中它崩溃说“LD:尝试静态链接到动态对象/usr/local/lib/libpng16.so” 我已经摆脱了这一点,在 Makefile 中注释掉选项“-all-static”。现在它在

之后崩溃
/bin/bash: O2: not found
/bin/bash: w: not found
/bin/bash: DTARGET_KERNEL: not found

所有这些选项前面都有破折号。它看起来像:

fbcondecor_helper_CFLAGS = -O2 -w \...
fbcondecor_helper_CPPFLAGS = $(AM_CPPFLAGS) -DTARGET_KERNEL

但不知何故,我的 shell 将它们解释为没有破折号的命令。 怎么了?

【问题讨论】:

    标签: linux compiler-errors tiny-core-linux


    【解决方案1】:

    首先,您没有使用自动工具。您正在使用使用自动工具生成的配置脚本。 (如果您确实在运行 autoconf 或 autoreconf,这是一个不同的问题,并且您有(更多)错误的余地。)在任何一种情况下,您都不应该手动编辑生成的 Makefile。 (对“出了什么问题?”的简短回答是,“您编辑了 Makefile”。)而是在运行 configure 时添加 --disable-static

    【讨论】:

    • 我对自动工具知之甚少;我已经习惯了./configure && make。在这种情况下,我正在执行 autoreconf -fiv && automake && ./configure && make。没有一些配置文件,所以autoconf不起作用,我必须做autoreconf -fiv(我在网上看过这个解决方案)。
    • 我也尝试过使用 --disable-static 选项进行配置,但无济于事;它继续尝试静态链接 /usr/local/lib/libpng16.so 并给出相同的错误...然后我尝试使用 --disable-shared 进行配置以防止它使用来自 /usr/local/lib 的共享库,子目录中有静态库,但由于某种原因它不使用它。
    • 顺便说一句,当我第一次在源根目录中运行“make”时,它开始编译 libs/libjpeg/ 并抱怨“make [3]: O2: command not found”(x10次)。然后我进入 libs/libjpeg 并从那里运行“make”;它编译得很好。之后我返回到 ../../ 并重新启动 make,它将 libjpeg 视为已制作并开始制作 zlib 并崩溃并出现相同的错误。所以我必须去 libs/zlib/ 并在那里运行 make 并重复这个过程,直到 libs/ 子目录中的所有库都“自主”构建。
    • Grrr。项目不应要求其用户运行 autoreconf,但这不会解决您的问题。您可以尝试将标志传递给链接器,告诉它在查看 /usr/local/lib 之前先查看本地目录。也许./configure --disable-shared LDFLAGS=-L$(pwd)/libs
    • 我的帖子缺少很多相关信息,如果不查看所有场景很难正确回答,我敢肯定。(我试过这个标志选项它没有帮助;它是一个旧的项目最后一次更新是在 2011 年,我不知道它是否适用于最新版本的 autotools。Autoconf 抱怨一些未定义的......该死......我在不同的操作系统下,无法给出准确的报价......一些未定义的常量,例如 AM_INIT_LIBTOOL 或 AM_CONDITIONAL。只有在那之后我才会执行 autoreconf——它会创建一个有效的配置。
    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多