c++ - 链接目标文件和静态库时的顺序
问题描述
我创建了 2 个目标文件hello.o
和hi.o
,每个文件分别包含一个同名的函数。此外,greetings.h
还创建了包含两个目标文件的函数原型。
main.o
当我以任何顺序链接这两个目标文件时,该过程成功并且我得到 a.out。但是如果你从hello.o
和hi.o
文件中创建一个静态库,那么链接只会在 order 中成功g++ main.o glib.a
。
据我了解,顺序应该是从声明的文件到包含定义的文件,但是单独链接目标文件时,它不起作用。链接库和目标文件以及仅链接目标文件有什么区别?
例子:
源代码:
greetings.hpp
#ifndef GREETINGS_HPP
#define GREETINGS_HPP
void hello();
void hi();
#endif
hello.cpp
#include <iostream>
void hello() {
std::cout << "Hello!" << std::endl;
}
hi.cpp
#include <iostream>
void hi() {
std::cout << "Hi!" << std::endl;
}
main.cpp
#include "greetings.hpp"
int main () {
hello();
hi();
return 0;
}
行动:
ar -src glib.a hello.o hi.o
g++ glib.a main.o
错误:
main.o: In function `main':
main.cpp:(.text+0x5): undefined reference to `hello()'
main.cpp:(.text+0xa): undefined reference to `hi()'
collect2: error: ld returned 1 exit status
解决方案
推荐阅读
- javascript - 为什么注册和我总是在变异和查询类型中?
- sql-server - 无法从 AspNetCore 应用程序连接 Docker MsSql
- rx-java2 - 阻塞 RxAndroidBle 写操作
- python - 使用内置 inception 脚本将图像目录转换为 tfrecords
- kdb - 在上一个查询完成之前停止进程运行的最佳方法是什么?
- sharepoint - 更改所有 SharePoint Online 对象中的网站 URL
- php - 问题自动加载类 PHP Slim 框架
- json - 为什么我的程序不使用 Python3 从 url 中检索图像?
- python - OpenCV-错误检测
- mongoose - 即使我使用 addToSet,mongoose unique 在对象的子项中也不起作用