在 Eclipse 上构建 FLTK 应用程序时缺少库

Missing library when building an FLTK application on Eclipse

提问人:Guy 提问时间:3/7/2023 最后编辑:Guy 更新时间:3/10/2023 访问量:77

问:

我已经在我的 Intel 64 MacBook 和 Mac OS 上使用自制软件安装了 FLTK。在 Eclipse 中制作了一个 C++ 项目,并从 FLTK 文档中复制/粘贴了 Hellow World 示例。我可以毫无错误地编译模块,但链接总是失败,说它找不到或加载库 libfltk.a。

生成的输出(包括错误消息)为:

Building target: helloWorld
Invoking: MacOS X C++ Linker
g++ -L/usr/local/lib/ -L/Users/guyhbroadfoot/eclipse-workspace/helloWorld/lib/ -o "helloWorld"  ./src/helloWorld.o    -llibfltk.a
ld: library not found for -llibfltk.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [helloWorld] Error 1
make: *** [all] Error 2
"make all" terminated with exit code 2. Build might be     incomplete.

15:43:51 Build Failed. 3 errors, 0 warnings. (took 2s.531ms)
-

helloWorld.cpp 是从 FLTK 手册中的示例中剪切/粘贴的,如下所示:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <iostream>
using namespace std;

int main(int argc, char **argv) {
    Fl_Window *window = new Fl_Window(340, 180);
    Fl_Box *box = new Fl_Box(20, 40, 300, 100,
                             "Hello, World!");
    box->box(FL_UP_BOX);
    box->labelfont(FL_BOLD + FL_ITALIC);
    box->labelsize(36);
    box->labeltype(FL_SHADOW_LABEL);
    window->end();
    window->show(argc, argv);
    return Fl::run();
}

Homebrew 将 FLTK 静态库安装在 /usr/local/lib 中,这是 Eclipse 的默认搜索位置。它还将包含文件安装在 /usr/local/include/FL 中,编译器可以毫不费力地找到这些文件。我尝试将显式 /usr/local/lib 路径添加到 Eclipse 中的链接器设置中,并且它使用此 -L 设置正确生成命令。我还告诉它使用库 libfltk.a,它尝试这样做,但总是报告找不到它。

我已经搜索了这方面的帮助,但所有建议似乎都假设我想下载 FLTK 源代码并自己构建它,我真的没有。我曾希望通过自制软件进行安装是我需要做的。

有没有人成功地使用通过自制软件安装的 FLTK 构建程序,而无需从头开始重建 FLTK 库本身?

任何想法都将不胜感激。在寻求帮助之前,我已经做了平常的事情,RTFM 等。

C++ 自制 FLTK

评论

2赞 Joachim Sauer 3/7/2023
编辑您的问题以提供链接器给您的确切错误消息(以文本形式),理想情况下,还提供所涉及的链接器的确切命令行(我不知道 Eclipse 是否显示了这一点,但我怀疑它确实如此)。
0赞 Community 3/8/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。
0赞 Joakim Elofsson 3/10/2023
省略 'lib',尝试 -lfltk
0赞 Guy 3/13/2023
@Joakib:谢谢你的建议。这治愈了“未找到库错误”,尽管我不知道为什么,因为库名称是 libfltk.a。但是,现在,对于许多名称为“_CFAbsoluteTimeGetCurrent”、“_CFAttributedStringCreate”、“_CFDictionaryCreateMutable”、“_CFDictionarySetValue”、“_CFGetRetainCount”、“_CFNumberCreate”的符号,我遇到了错误“未定义的架构x86_64符号。有人会知道这是什么原因吗?
0赞 Matthias Melcher 4/14/2023
在 MacOS 上,需要链接 Cocoa 系统框架:“-framework cocoa”

答: 暂无答案