如何在 C++ 中 link 一个 .a 文件
How to link a .a file in C++
我正在尝试让 yaml-cpp parser 在我的计算机上运行。我按照 README 上的说明进行操作,它生成了文件 libyaml-cpp.a
,没有任何错误或警告。然后我将该文件复制到一个目录中,我们称它为 /path/to/files
,其中我还放置了 b.yaml
和 main.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'
。以下是我尝试过的一些方法:
g++ main.cpp -lyaml-cpp -L/path/to/files
g++ main.cpp libyaml-cpp.a
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
我正在尝试让 yaml-cpp parser 在我的计算机上运行。我按照 README 上的说明进行操作,它生成了文件 libyaml-cpp.a
,没有任何错误或警告。然后我将该文件复制到一个目录中,我们称它为 /path/to/files
,其中我还放置了 b.yaml
和 main.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'
。以下是我尝试过的一些方法:
g++ main.cpp -lyaml-cpp -L/path/to/files
g++ main.cpp libyaml-cpp.a
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