【问题标题】:How do you add libraries to Eclipse CDT? (No such file or directory)如何将库添加到 Eclipse CDT? (没有相应的文件和目录)
【发布时间】:2013-01-11 22:36:48
【问题描述】:

我在添加头库时遇到了一些问题。

我右键单击我的项目,然后单击Properties-> C/C++ General-> Paths and Symbols

包含选项卡中:语言-> GNU C++

我点击添加... -> 文件系统,然后添加名为 boost_1_52_0 的文件夹或任何其他文件夹。

当我使用 Eclipse 的智能感知时,它会找到我想要的,但是构建失败。

fatal error: boost/random/...: No such file or directory

不知道为什么会这样。

任何刚起步的帮助将不胜感激。

22:34:02 **** Incremental Build of configuration Default for project TestProj****
make all 
g++ -O2 -g -Wall -fmessage-length=0    -c -o TestProj.o TestProj.cpp
TestProj.cpp:5:52: fatal error: boost/random/random_number_generator.hpp: No such file     or directory
<builtin>: recipe for target `TestProj.o' failed
compilation terminated.
make: *** [TestProj.o] Error 1

显然,这并不像将文件夹添加到 eclipse 提供的接口那样简单。我很敬畏。

问候, 丹麦人

【问题讨论】:

  • 取决于项目类型和构建策略设置(请参阅我对您的回答的评论)。

标签: c++ eclipse


【解决方案1】:

我右键单击我的项目,然后单击属性-> C/C++ 常规-> 路径和符号。

在包含选项卡中:语言-> GNU C++

我点击添加... -> 文件系统,然后添加名为 boost_1_52_0 的文件夹或任何其他文件夹。

当我使用 Eclipse 的智能感知时,它会找到我想要的,但是构建失败。

是的,这就是您可能需要保持 Eclipse CDT 智能感知和索引器与您的外部参考同步。

fatal error: boost/random/...: No such file or directory

不知道为什么会这样。

这是因为您对如何构建项目的设置可能会选择您自己管理构建过程:

如果是这样,您必须让您手动管理的makefile 了解环境和编译器/链接器标志设置。

在这种情况下,使用 Eclipse CDT 构建属性与手动管理的 makefile 进行通信的一种方法是使用例如Build VariablesEnvironment 来自上述项目属性部分的设置:

【讨论】:

    【解决方案2】:

    添加的内容取决于您要添加的内容。在 Boost 的情况下,有许多只包含头文件的库,并且有些库需要在静态/共享对象库中进行链接(例如,序列化)。

    仅标题库

    对于只有头文件的库,您只需要包含所有头文件的基本目录。使用gcc,您可以使用-I 标志添加目录(例如-I C:/path/to/boost_52_0)。使用 Eclipse 中的托管 makefile 项目,您可以使用 Properties &gt; C/C++ Build &gt; Settings &gt; Tool Settings &gt; GCC C++ Compiler &gt; Directories 完成相同的操作

    静态/共享对象库

    对于静态/共享对象库,您必须指定两个选项:

    1. -l --> 库的名称,减去“lib”前缀和文件后缀(例如,libboost_serialization.dll -> boost_serialization
    2. -L --> 查找库文件的目录。仅当库位于非标准路径上时才需要。

    正如@Chris 指出的,对于托管的makefile 项目,这两个选项都可以通过Properties &gt; C/C++ Build &gt; Settings &gt; Tool Settings &gt; GCC C++ Linker &gt; Libraries 进行设置

    【讨论】:

      【解决方案3】:

      Properties &gt; C/C++ Build &gt; Settings &gt; Tool settings &gt; ... Linker &gt; Libraries 是你在搜索什么?这是从命令行编译时添加 -l 选项的地方。

      【讨论】:

      • 我已将 -I'directory' 添加到 make 文件的 CXXFLAGS 部分。似乎没有任何效果。
      【解决方案4】:

      我遇到了同样的问题。更改 C/C++ Build --> Settings 中的设置解决了这个问题。确保排除了“.lib”文件扩展名!请看下面的截图:

      【讨论】:

        【解决方案5】:

        通过在makefile中添加-I来解决。

        BOOST =     C:/Users/neo/Documents/boost_1_52
        
        CXXFLAGS =  -O2 -g -Wall -fmessage-length=0 -I$(BOOST)
        
        OBJS =      p1.o
        
        LIBS =      
        
        TARGET =    p1.exe
        
        
        $(TARGET):  $(OBJS)
            $(CXX) -o $(TARGET) $(OBJS) $(LIBS)
        
        all:    $(TARGET)
        
        clean:
            rm -f $(OBJS) $(TARGET)
        

        【讨论】:

        • -1 这绝不会回答您标题中的问题,因为 makefile 完全取决于您的 CDT 项目类型。如果它是一个makefile项目,是的。对于 CDT 自动化 C/C++ 项目,没有!
        • 顺便说一句:添加了-I &lt;what??&gt; 到哪个makefile,你的构建环境的绝对路径?
        • 我对 SO 的赏金政策进行了一些研究,并指出您永远不会通过自己回答问题而获得声望点数退款。顺便说一句,您的答案仍然没有涵盖您一直在质疑的内容。它仅适用于您的特定 Eclipse 项目设置,但不会帮助任何其他用户寻找'如何将库添加到 Eclipse CDT?' ... 的答案
        猜你喜欢
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2011-10-10
        相关资源
        最近更新 更多