Учитывая main. cpp:
#include "A.h"
A a;
int main() {
}
Ах:
#ifndef A_HDR
#define A_HDR
class A {
public:
A();
};
#endif
A. cpp:
#include <iostream>
#include "A.h"
A::A() {
std::cout << "A ctor\n";
}
Я создаю перемещаемый объект файлы main.o
и A.o
с g++ -c
. Тогда:
> g++ main.o A.o
> ./a.out
Segmentation fault (core dumped)
> g++ A.o main.o
>./a.out
A ctor
Почему разница? Если я переместу определение a
из глобального пространства имен в область действия main
, оно выведет A ctor
, как я и ожидал.
> g++ --version
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0