Hallo,
Ich habe eine Software, die im wesentlichen aus C-Code besteht. Nun
möchte ich aus diesem Code ein Modul aufrufen, das in C++ geschrieben
ist.
Dafür habe ich für den C++-Code eine C-API geschrieben.
Der gesamte Code soll in eine statische lib compiliert werden, was auch
fehlerfrei funktioniert. Nur kann wenn ich diese lib in einem anderen
Programm verwenden möchte der linker die Symbole der C-API Funktionen
nicht auflösen und ich verstehe nicht warum.
Compiler gcc/g++, Cross-Compile für Linux aus Cygwin.
Ich versuche mal mit einem Beispiel darzustellen, wie ich das gemacht
habe:
test.c:
1 | #include "cpp_api.h"
|
2 | void test()
|
3 | {
|
4 | cpp_function();
|
5 | }
|
cpp_api.h:
cpp_api.cpp
1 | extern "C" void cpp_function()
|
2 | {
|
3 | ...
|
4 | }
|
Wenn ich das ganze in test.a compiliere und "nm -g test.a" aufrufe
bekomme ich auszugsweise sowas:
1 | test.o:
|
2 | ...
|
3 | U cpp_function
|
4 |
|
5 | cpp_api.o:
|
6 | ...
|
7 | T _cpp_function
|
Laut nm-Manual (habe das tool gerade erst entdeckt und kenn mich nicht
aus...) steht das U für Unresolved. Ist das an der Stelle normal, weil
die Funktion in einem anderen object-file steht? Und warum hat
cpp_funtion in cpp_api.o einen führenden Unterstrich?
Jedenfalls sagt der Linker, der test.a einbinden soll "...undefined
symbol: cpp_funtion"
Was mache ich falsch?