C++ 如何编译使用源代码中的头文件的应用程序?

C++ 如何编译使用源代码中的头文件的应用程序?,c++,static,linker,libraries,C++,Static,Linker,Libraries,这个问题可能已经被回答了无数次——我读到过一些类似的问题,但我还是不明白 我有LIBIML项目的来源——一个C++聊天程序,用于Acter一个聊天箱程序的规范。 在示例程序的源代码中,它包含对头文件的#include调用: #include "../src/aiml.h" 头文件在那里,我编译并链接了程序,它声明找不到头文件 各种回答都指出头文件需要编译到静态库(一个.a文件)中,但是如果没有编译到库二进制文件中,程序将如何引用.h文件 我还尝试用G++和ar将src编译成一个库,但它包含很多

这个问题可能已经被回答了无数次——我读到过一些类似的问题,但我还是不明白

我有LIBIML项目的来源——一个C++聊天程序,用于Acter一个聊天箱程序的规范。 在示例程序的源代码中,它包含对头文件的#include调用:

#include "../src/aiml.h"
头文件在那里,我编译并链接了程序,它声明找不到头文件

各种回答都指出头文件需要编译到静态库(一个.a文件)中,但是如果没有编译到库二进制文件中,程序将如何引用.h文件

我还尝试用G++和ar将src编译成一个库,但它包含很多错误。 我做错什么了吗

我做错什么了吗

是的:你完全错误地陈述了发生在你身上的事情。您说“它声明无法找到头文件”和“我编译并链接了程序”

但真正发生的是,您已经编译并未能链接程序,错误与头文件无关;而是在链接时丢失符号

要解决问题,必须将
libaiml
库链接到可执行文件(此库应该是在
。/src/
目录中构建时构建的。类似的操作应该可以:

g++ -I../src -o program program.cc -L../src -laiml

只需添加-链接器并不认为它找不到它-它可以,但库中的所有方法都未定义。如果它找不到头,您是否提供了头的包含路径?相对路径看起来可疑。您是否在正确的目录中编译(同级目录为
src
)?此头文件包含什么?如果它包含函数定义而不是函数声明,则您需要创建一个仅包含此文件的额外模块,并将其链接到您的程序。复制并粘贴实际的错误消息。