如何在 C++ 中 link 一个 .a 文件

How to link a .a file in C++

我正在尝试让 yaml-cpp parser 在我的计算机上运行。我按照 README 上的说明进行操作,它生成了文件 libyaml-cpp.a,没有任何错误或警告。然后我将该文件复制到一个目录中,我们称它为 /path/to/files,其中我还放置了 b.yamlmain.cpp,其中包含以下文本:

// main.cpp

int main(int argc, const char *argv[])
{
  YAML::Node config = YAML::LoadFile("b.yaml");
  return 0;
}

这来自 yaml-cpp tutorial 的第一行。我尝试在以几种不同的方式链接到 yaml-cpp 库时编译它,所有这些方式都会导致相同的编译时错误:use of undeclared identifier 'YAML'。以下是我尝试过的一些方法:

  1. g++ main.cpp -lyaml-cpp -L/path/to/files
  2. g++ main.cpp libyaml-cpp.a
  3. g++ main.cpp libyaml-cpp.a -lyaml-cpp -L/path/to/files

等等。如何正确编译或更正确地调试此过程?

==编辑==

现在我的 main.cpp 文件如下所示:

// main.cpp

#include <iostream>
#include "yaml.h"

int main(int argc, const char *argv[])
{
  YAML::Node config = YAML::LoadFile("b.yaml");
  return 0;
}

这是我的编译命令和错误信息:

$ g++ main.cpp -lyaml-cpp -I/Users/benlindsay/scratch/yaml-cpp/include -L/Users/benlindsay/scratch/yaml-cpp/build
main.cpp:10:3: error: use of undeclared identifier 'YAML'
  YAML::Node config = YAML::LoadFile("b.yaml");
  ^
main.cpp:10:23: error: use of undeclared identifier 'YAML'
  YAML::Node config = YAML::LoadFile("b.yaml");
                      ^
2 errors generated.
make: *** [a.out] Error 1

/Users/benlindsay/scratch/yaml-cpp/include 包含一个 yaml-cpp 目录,该目录又包含所有 .h 文件,包括 yaml.h/Users/benlindsay/scratch/yaml-cpp/build 包含 lyaml-cpp.a 文件。

好的,我下载了 yaml-cpp 并试用了,这是一个可用的版本

#include <iostream>
#include "yaml-cpp/yaml.h" //You need to prepend the yaml-cpp

int main(int argc, const char *argv[])
{
     YAML::Node config = YAML::LoadFile("b.yaml");
     //return 0; In cpp, return 0 is not required on main, hence commented
}

编译使用g++ -std=c++11 main.cpp -lyaml-cpp -I/Users/benlindsay/scratch/yaml-cpp/include -L/Users/benlindsay/scratch/yaml-cpp/build