2017-04-03 7 views
0

Ich habe ein statisches Bibliotheksprojekt (in C-Sprache geschrieben) und ein anderes Beispielprojekt (in C-Sprache geschrieben) unter Visual Studio 2015. Ich kann die Funktionen in der Bibliothek in der Beispielprojekt ohne irgendein Problem. Mein Problem ist, dass ich ein Makro in einer der Header-Dateien im statischen Bibliotheksprojekt habe und ich kann dieses Makro im Beispielprojekt nicht sehen (oder verwenden). Ich erhalte diesen Fehler: "nicht aufgelöstes externes Symbol ADD1, auf das in der Funktion main verwiesen wird". Wie kann ich dieses Makro im Beispielprojekt verwenden?statische Bibliothek enthält kein Makro

Hinweis: Ich habe die Bibliotheksdatei in das Beispielprojekt dank dieser Pragma verwenden diese Pragma: #pragma comment (lib, "mylib.lib")

+2

und wie enthalten Sie die Header-Datei für die Bibliothek? –

+0

Haben Sie Header in Ihren Code eingefügt? – LPs

+0

Nein, ich nicht! Darüber hinaus möchte ich keine der Header-Dateien des statischen Bibliotheksprojekts enthalten. Sie sollen nicht von anderen Projekten gesehen werden. – sanchop22

Antwort

2

Fügen Sie Ihrem Header mit der #include Richtlinie, nicht mit einigen Pragma .

Ein Header sollte so geschrieben werden, dass es die öffentliche Schnittstelle zu Ihrer Bibliothek ist, auch wenn der Bibliothekscode selbst möglicherweise nicht geöffnet ist. Entweder ist das Makro öffentlich und kann dann in der Kopfzeile deklariert werden, oder es ist nicht öffentlich. In diesem Fall sollten Sie es in der Bibliothek kapseln.

Wenn der Bibliothekscode vorkompiliert und als Binärdatei geliefert wird, deklarieren Sie ihn entweder in einer C-Datei oder in einer H-Datei, auf die der Aufrufer keinen Zugriff hat.

+1

Das 'Pragma' ist für Visual Studio - es ist eine Methode, um die Binärdatei der Bibliothek mit der Anwendung zu verknüpfen. ('gcc' verwendet zu diesem Zweck die Option' -l'). – Attie

+1

@Attie Die Bibliothek ist keine Kopfzeile, aber sie muss eine geben. – Lundin

3

I do not want to include any of the header files of the static library project. They are not supposed to be seen by other projects.

Ich denke, es einige Verwirrung.


Um die Verwendung von jeder Bibliothek zu machen, müssen Sie seine Funktionen kennen, Datentypen (zum Beispiel: enum, struct, typedef), Makros, etc ... Das alles kommt zusammen, um die ‚API‘ Bibliothek zu bilden.

Die meisten Bibliotheken (nicht alle) haben einige interne Header. Sie haben Recht, diese sollen von anderen Projekten nicht gesehen werden und werden streng intern verwendet.

Alle Bibliotheken haben einige 'öffentliche' Header, die ihre API definieren. Eine Codebasis ohne eine öffentliche API ist entweder nutzlos oder tatsächlich eine Anwendung, die eigenständig ist.

Verwandte Themen