c++ - 如何将 .cpp 文件链接到 .h 文件以获取下载的库

标签 c++ libraries

我是 C++ 的新手,我一直在完成斯坦福 106B CS 类(class)的练习。我在这里和其他地方发现了很多与我有类似问题的帖子,但没有一个可以帮助我解决我的具体问题。 Stanford 106B 类(class)使用我下载的 StanfordCPPlib 或 Stanford c++ 库。我正在尝试完成一个需要我 #include "random.h"的练习,这样我就可以使用一种方法来找到 0 到 1 之间的随机实数。无论如何,只需编写 #include "random.h"和其余的文本文件中的必要代码不起作用。我收到此错误:

make random
c++     random.cpp   -o random
Undefined symbols for architecture x86_64:
  "randomReal(double, double)", referenced from:
      _main in random-BBexsD.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [random] Error 1

斯坦福类(class)使用 Xcode,从网站下载的家庭作业已经设置了 Xcode 项目以与斯坦福库一起运行。还有一个空白的 Xcode 项目模板可用于教科书练习。但是,我试图弄清楚如何在文本编辑器或终端或两者中执行此操作。我通常使用文本编辑器编写所有代码并在终端中执行。我试过编写#include "file_path_to_stanford_libraries/random.h",我什至不确定它在 .cpp 文件中是否有效,但我试过了但无济于事。我尝试将这些文件放在与我的 random.cpp 文件完全相同的目录中,但这也没有用。很抱歉这么长,希望不是空洞的帖子。我感谢任何帮助。

最佳答案

该链接器错误通常意味着头文件被包含得很好,但是没有包含库。我不知道 Clang,所以不能给你一个完整的答案,但是对于 g++,你需要找到库文件并确保它的目录在你的 LD_LIBRARY_PATH 中,然后取它的名字;它将类似于“libStanfordCPP.so”。然后,您需要在命令行上的链接器中添加一个标志,其中包含名称的粗体部分(在 lib 和文件扩展名之间)在 -l(连字符-L)之后,所以这里是 -lStanfordCPP.

你的命令行看起来像这样:

g++ -o bin/random random.cpp -lStanfordCPP

不幸的是,这不是 Clang,但它的工作原理应该差不多。如果其他人愿意提供 Clang 方式(或验证您可以使用 Clang 做到这一点),那就太好了。

关于c++ - 如何将 .cpp 文件链接到 .h 文件以获取下载的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647193/

相关文章:

ios - 在框架中使用 cocoapods

c++ - 在 C++ 中将库链接到 linux 二进制文件

linux - 是否可以让使用不同选项编译的运行时库和应用程序一起顺利运行?

c++ - 使用 C++ 开发 Windows Phone 应用程序

c++ - 是使用T const&还是T&&

c++ - 将 char 绑定(bind)到枚举类型

python - 将C++ `for`循环干净地移植到Python时遇到麻烦

c++ - 在不同线程中执行 future 时避免破坏对象

c - 尝试从用户库访问函数时出现段错误

node.js - 我应该将 'request' 模块用于新项目吗?