3 Stimmen

Wie kann ich externe Funktionen in C oder C++ quellen lassen/verknüpfen?

EDITAR: Ich denke, ich sollte das klarstellen, falls es von Bedeutung ist. Ich arbeite auf einer AIX-Unix-Box, also verwende ich VAC-Compiler - keine Gnu-Compiler. Ende bearbeiten


Ich bin ziemlich eingerostet in C/C++, also verzeihen Sie mir, wenn dies eine einfache Frage ist.

Ich möchte allgemeine Funktionen aus einigen meiner C-Programme herausnehmen und sie in gemeinsam genutzte Bibliotheken oder gemeinsam genutzte Objekte stellen. Wenn ich das in Perl machen würde, würde ich meine Subs in ein Perl-Modul packen und dieses Modul bei Bedarf verwenden.

Nehmen wir als Beispiel an, ich habe diese Funktion:

int giveInteger()
{
    return 1034;
}

Natürlich ist dies kein reales Beispiel, aber wie würde ich vorgehen, wenn ich diese Funktion gemeinsam nutzen wollte?

Ich bin mir ziemlich sicher, dass ich 2 Möglichkeiten habe:

  1. Legen Sie meine gemeinsam genutzte Funktion in eine Datei, und lassen Sie sie zur Kompilierzeit mit meinem Hauptprogramm kompilieren. Wenn ich jemals Änderungen an meiner gemeinsamen Funktion vornehme, muss ich mein Hauptprogramm neu kompilieren.
  2. Legen Sie meine gemeinsam genutzte Funktion in eine Datei, und kompilieren Sie sie als gemeinsam genutzte Bibliothek (wenn ich meine Begriffe richtig verstanden habe), und haben mein Hauptprogramm Link zu dieser gemeinsam genutzten Bibliothek. Alle Änderungen, die ich an meiner gemeinsam genutzten Bibliothek vornehme (nachdem ich sie kompiliert habe), werden zur Laufzeit in mein Hauptprogramm integriert, ohne dass ich mein Hauptprogramm neu kompilieren muss.

Liege ich mit dieser Annahme richtig?

Wenn ja, wie kann ich eine oder beide dieser Methoden anwenden? Ich habe viel gesucht und scheine Informationen darüber zu finden, wie ich mein eigenes Programm mit der gemeinsam genutzten Bibliothek eines anderen verknüpfen kann, aber nicht, wie ich meine eigenen gemeinsam genutzten Funktionen erstellen und sie so kompilieren kann, dass ich sie in meinem eigenen Programm verwenden kann.

Vielen Dank!

Brian


EDITAR:

Schlussfolgerung

Vielen Dank an alle für ihre Hilfe! Ich dachte, ich würde zu diesem Beitrag hinzufügen, was für mich funktioniert (für dynamische gemeinsame Bibliotheken auf AIX), so dass andere profitieren können:

Ich kompiliere meine gemeinsamen Funktionen:

xlc -c sharedFunctions.c -o sharedFunctions.o

Dann machen Sie es zu einem gemeinsamen Objekt:

xlc -qmkshrobj -qexpfile=exportlist sharedFunctions.o
xlc -G -o libsharedFunctions.so sharedFunctions.o  -bE:exportlist

Dann verknüpfen Sie es mit einem anderen Programm:

xlc -brtl -o mainProgram mainProgram.c  -L. -lsharedFunctions

Und ein anderer Kommentar half mir, diesen Link zu finden, der ebenfalls hilfreich war: http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/topic/com.ibm.vacpp7a.doc/proguide/ref/compile_library.htm

Nochmals vielen Dank an alle, die mir geholfen haben!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X