首页 > 解决方案 > 链接目标文件和静态库时的顺序

问题描述

我创建了 2 个目标文件hello.ohi.o,每个文件分别包含一个同名的函数。此外,greetings.h还创建了包含两个目标文件的函数原型。

main.o当我以任何顺序链接这两个目标文件时,该过程成功并且我得到 a.out。但是如果你从hello.ohi.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

标签: c++linker

解决方案


推荐阅读