Mam bibliotekę statyczną, którą zbudowałem przy pomocy MinGW, próbuję połączyć z tą biblioteką z aplikacji Qt. Wciąż dostaję błędy linkera spowodowane przez jeden z plików obiektowych w bibliotece. Ten plik faktycznie deklaruje kilka nagłówków Boost, jeden do użycia shared_ptr i drugi, dzięki czemu mogę uczynić klasę noncopyable. Uważam, że używanie tej funkcji zwiększania jest przyczyną problemu, ale nie mam pojęcia, dlaczego. Jeśli skomentuję klasy w aplikacji Qt, które używają klasy zdefiniowanej w pliku, aplikacja Qt łączy się dobrze. Jest to część błąd wyjścia:Niezdefiniowane odniesienia podczas próby połączenia aplikacji Qt z moją biblioteką statyczną
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj). Foo_ctis.cpp :(tekst + 0x10a): niezdefiniowany odniesienie do `__gxx_personality_sj0'
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj): foo_ctis.cpp :(tekstu + 0x12f). niezdefiniowana odniesienia do ` _Unwind_SjLj_Register "
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj). foo_ctis.cpp :(tekst + 0x203): niezdefiniowana odniesienia do `_Unwind_SjLj_Resume '
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj). Foo_ctis.cpp :(tekst + 0x20e): niezdefiniowana odniesienia do ` _Unwind_SjLj_Unregister'
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj): foo_ctis.cpp :(tekst + 0x226). niezdefiniowana odniesienia do `__gxx_personality_sj0'
C: \ blah \ build \ windows \ mingw \ libfoo.a (foo_ctis.cpp.obj): foo_ctis.cpp :(. text + 0x24b): niezdefiniowane odniesienie do `_Unwind_SjLj_Register '
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj). Foo_ctis.cpp :(tekst + 0x31f): niezdefiniowana odniesienia do `_Unwind_SjLj_Resume”
C : \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj): foo_ctis.cpp :(tekstu + 0x32a). niezdefiniowana odniesienia do `_Unwind_SjLj_Unregister”
C: \ bla \ build \ windows \ mingw \ libfoo.a (foo_ctis.cpp.obj): foo_ctis.cpp :(. text $ _ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_ [boost :: szczegóły :: shared_count :: shared_count (foo :: foo_SomeClassImpl *)] + 0xc): undefined odniesienie do `__gxx_personality_sj0'
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj). foo_ctis.cpp :(tekst $ _ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_ [boost :: :: shared_count szczegół: : shared_count (foo :: foo_SomeClassImpl *)] + 0x31): niezdefiniowana odniesienia do `_Unwind_SjLj_Register”
C: \ bla \ budować \ windows \ MinGW \ libfoo.a (foo_ctis.cpp.obj): foo_ctis. CPP :(tekst $ _ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_ [boost :: detal :: shared_count :: shared_count (foo :: foo_SomeClassImpl *)] + 0xfb). niezdefiniowana odniesienia do `_Unwind_SjLj_Resume”
C: \ blah \ build \ windows \ mingw \ libfoo.a (foo_ctis.cpp.obj): foo_ctis.cpp :(.tekst $ _ZN5boost6detail12shared_countC1IN3foo25foo_SomeClassImplEEEPT_ [boost :: detal :: shared_count :: shared_count (foo :: foo_SomeClassImpl *)] + 0x106): niezdefiniowana odniesienia do `collect2 _Unwind_SjLj_Unregister”: ld powrócił 1 exit status
jednego z pozostałych trzeba wspomnieć, że używam wskaźnika do implementacji w tej klasie. Każda pomoc byłaby mile widziana.
Rozwiązane: Stwierdziłem, że mam starszą wersję GCC na mojej ścieżce, która została dołączona przed moją dostarczoną przez MinGW wersją GCC. Stara wersja była zawarta w pakiecie GNUStep, który miałem od jakiegoś czasu. Myślę, że konfiguracja tych różnych wersji powodowała problemy. Dzięki kemiisto, który był na właściwej drodze do rozwiązania problemu.
Cześć kemiisto, dziękuję za odpowiedź. Uważam, że używam tej samej wersji MinGW. Używam CMake do tworzenia różnych typów plików Makefile. Próbowałem tworzyć pliki Makefile dla MinGW i otrzymywałem błędy, więc umieściłem C: \ Qt \ 2009.05 \ mingw \ bin w mojej ścieżce wiersza polecenia.Po tym CMake był w stanie wygenerować pliki MakeGile MinGW i mogłem użyć mingw32-make do zbudowania biblioteki statycznej. Czy nie byłoby to używanie tej samej wersji? Chyba nie mam innej wersji na moim komputerze. – csmithmaui
@csmithmaui: w takim przypadku mam jeszcze jeden pomysł. Dodałem trochę informacji do mojej wiadomości. – Wildcat
Przeanalizowałem moją ścieżkę i właściwie nie mam ani jednego z tych, które napisałeś powyżej. Po prostu mam C: \ Qt \ 2009.05 \ mingw \ bin. Moja biblioteka statyczna buduje się dobrze w wierszu polecenia po uwzględnieniu ścieżki MinGW, którą właśnie omówiłem. Problem polega na tym, że gdy próbuję połączyć się z moją biblioteką z QtCreator, otrzymuję błędy linkera. Przeczytałem linki, które opublikowałeś, ale nie sądzę, że to mój problem. Ponadto, jeśli usunę wszelkie odwołania do klasy zawartej w danym pliku, wszystko inne łączy się dobrze. Doceniam twoją pomoc. – csmithmaui