Mam pliki (w tym samym folderze):
/* shared.hpp */
#ifndef SHARED_HPP__
#define SHARED_HPP__
void f();
class X
{
public:
X();
void mX();
};
#endif
/* shared.cpp */
#include "shared.hpp"
#include <iostream>
void f() { std::cout << "f()\n"; }
X::X() { std::cout << "X::X()\n"; }
void X::mX() { std::cout << "X::mX()\n"; }
/* main.cpp */
#include "shared.hpp"
#include <iostream>
int main()
{
std::cout << "Hello!" << std::endl;
f();
X x;
x.mX();
return 0;
}
Biblioteke kompiluje z pozytywny skutkiem przez:
g++ -fPIC -shared shared.cpp -o libshared.so
Polecenie:
nm libshared.so --demangled
Zawiera w wyniku:
...
0000000000000900 T f()
...
0000000000000940 T X::mX()
000000000000091c T X::X()
000000000000091c T X::X()
...
Main.cpp kompiluje poleceniem:
g++ -L. -lshared main.cpp -o main
ze skutkiem:
/tmp/ccZRM8El.o: In function `main':
main.cpp:(.text+0x34): undefined reference to `f()'
main.cpp:(.text+0x40): undefined reference to `X::X()'
main.cpp:(.text+0x4c): undefined reference to `X::mX()'
collect2: error: ld returned 1 exit status
ŁŁŁaaajjj?