2013-03-28 5 views
8

Używam biblioteki tinyxml do analizowania plików XML w moim projekcie. Kiedy staram się kierować platformy x64 dostaję błędy Linker i tu jest jeden fo nich:Tinyxml - Błędy linków podczas kierowania na platformę x64

Error 4 Błąd LNK2001: nierozwiązanych zewnętrznych symbolu "private: static struct TiXmlString :: Rep TiXmlString :: nullrep_" (? nullrep_ @ TiXmlString @@ 0URep @ 1 @ A) ClassThatUsesTinyXML.obj

Aktualizacja: Pomyślałem, że wersja x64 TinyXML nie został zainstalowany, ale kiedy próbowałem zbudować bibliotekę dla platform x64 mam ten błąd :

LNK1561: entry point must be defined 
+2

Proszę pisać _all_ z błędów. Założę się, że gdzieś na górze jest błąd, który mówi, że nie może znaleźć właściwej biblioteki. Czy zainstalowałeś 64-bitową bibliotekę? –

+0

Nie, nie zrobiłam ^^ ". Po prostu próbowałem zbudować tinyxml dla platform x64, ale nie mogłem. Tutaj jest błąd mam przy budowie TinyXML: 'Error błąd LNK1561: punktem wyjścia musi być zdefiniowany \t ścieżka \ tinyxml_2_6_2 \ TinyXML \ LINK ' – Kira

+0

@JoachimPileborg proszę sprawdzić moje aktualizacji – Kira

Odpowiedz

5

Zamiast budować TinyXML dla x64 platforms a następnie dodając tinyxml.h i tinystr.h do projektu, po prostu dodaje wszystkie pliki biblioteczne w tym .cpp plików i teraz mogę kierować platform x64, biblioteka jest w rzeczywistości powstaje kiedy zbuduj cały projekt.

+2

To w rzeczywistości nie korzysta z biblioteki współdzielonej tinyxml - to tylko brzydka forma statycznego powiązania. Pamiętaj, że będziesz musiał ponownie skompilować swoją aplikację, jeśli chcesz użyć nowej wersji tinyxml (ale czy tak często się zmienia?) –

3

Nie wygląda na to, że tinyxml obsługuje kompilacje bibliotek współdzielonych po wyjęciu z pudełka.

Oto kroki, które ja następnie zbudować DLL z TinyXML 2.6.2 źródeł:

  1. Otwórz plik SLN pod warunkiem, tinyxml.sln, w MS Visual Studio Express 2012 for Windows Desktop. Wybierz, aby przekonwertować stare pliki projektu na nowy format, gdy zostaniesz o to poproszony.
  2. z „Platformy rozwiązanie”, wybierz „Configuration Manager ...”
  3. Od „Aktywny platformie rozwiązanie:” wybierz „Nowy <...>”
  4. W „typ lub wybrać nową platformę:” wybierz "x64", jeśli jeszcze nie zostało wybrane. Upewnij się, że skopiowałeś ustawienia z konfiguracji "Win32". Kliknij OK. Kliknij Zamknij, aby wyjść z Menedżera konfiguracji.
  5. Kliknij prawym przyciskiem myszy projekt tinyxml w oknie Solution Explorer. Wybierz "Właściwości".
  6. Dla "Konfiguracja:" wybierz "Wszystkie konfiguracje". Podobnie w przypadku "Platformy:" wybierz "Wszystkie platformy".
  7. W oknie Właściwości konfiguracji → Ogólne zmień "Typ konfiguracji" na "Biblioteka dynamiczna (.dll)". Zmień "Rozszerzenie celu" na ".dll". Kliknij przycisk OK, aby zamknąć okno dialogowe Właściwości stron tinyxml.
  8. Wybierz konfigurację "Release" i platformę "x64".
  9. Kliknij prawym przyciskiem myszy na projekcie tinyxml w Solution Explorer ponownie i wybierz "Przebuduj".

ciągu tinyxml_2_6_2\tinyxml\x64\Release znajdziesz tinyxml.dll, ale nie biblioteka import (tinyxml.lib). Wynika to z faktu, że żadne symbole nie są eksportowane. Patrz: How do I build an import library (.lib) AND a DLL in Visual C++?

Aby przejść do udostępnionej trasy biblioteki, należy wyeksportować żądane symbole za pomocą modyfikatora MSVC specyficznego dla __declspec(dllexport). Zobacz Symbol Visibility in Windows.

1

Błędy występują podczas definiowania biblioteki TIXML_USE_STL do kompilacji biblioteki, ale nie dla źródeł, które łączą się z biblioteką.Końcowym rezultatem jest to, że biblioteka jest kompilowana za pomocą innego kodu ze źródeł korzystających z biblioteki.