Ik probeer om verschillende losse bestanden te compileren als object files en deze vervolgens te linken (omdat ik graag naar een Makefile toe wil).
Het maken van object files gaat goed, maar als ik wil gaan linken gaat het mis. Ik heb een drietal testbestanden gemaakt om te kijken of daar het probleem ook in optreedt en er gebeurt hetzelfde.
object.h
object.c
test.cc
Vervolgens creëer ik object files van test.cc en object.cc. Wanneer ik deze bestanden vervolgens probeer te linken krijg ik 'undefined reference errors'
Het maken van object files gaat goed, maar als ik wil gaan linken gaat het mis. Ik heb een drietal testbestanden gemaakt om te kijken of daar het probleem ook in optreedt en er gebeurt hetzelfde.
object.h
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #ifndef OBJECT_H #define OBJECT_H 1 namespace test { class test { private: int blatest; public: test(); ~test(); }; } #endif /* OBJECT_H */ |
object.c
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #include <iostream> #include "object.h" namespace test { inline test::test() { std::cout << "Constructing test" << std::endl; } inline test::~test() { std::cout << "Destructing test" << std::endl; } } |
test.cc
C++:
1
2
3
4
5
6
7
| #include "object.h" int main() { test::test testobj; return 0; } |
Vervolgens creëer ik object files van test.cc en object.cc. Wanneer ik deze bestanden vervolgens probeer te linken krijg ik 'undefined reference errors'
In de voorbeelden die ik kan vinden op diverse sites, wordt het allemaal op deze manier gedaan, maar ik krijg het niet voor elkaar. Waarom ziet de compiler de referentie naar test::test::test() niet? Deze staat gewoon in test.o$ g++ -c object.cc
$ g++ -c test.cc
$ g++ -o test test.o object.o
test.o: In function `main':
test.cc:(.text+0x11): undefined reference to `test::test::test()'
test.cc:(.text+0x22): undefined reference to `test::test::~test()'
collect2: ld returned 1 exit status
Ik ontken het bestaan van IE.