Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

error LNK2005: (...) already defined in LIBCMT.lib

Ostatnio zmodyfikowano 2012-05-09 20:41
Autor Wiadomość
Admixior
Temat założony przez niniejszego użytkownika
error LNK2005: (...) already defined in LIBCMT.lib
» 2012-05-08 23:12:25
Witam.
Mam problem taki że program kompiluje się, ale wychodzą błędy w linkerze:
uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMT.lib(new.obj)
1>uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj)
1>uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
1>uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMT.lib(delete2.obj)
1>C:\Users\Admixior\documents\visual studio 2010\Projects\NK Protection\Release\NK Protection.exe : fatal error LNK1169: one or more multiply defined symbols found
1>

Korzystam z visual 2010 ultimate i to jest projekt z użyciem mfc.
Oprócz tego dołączyłem kody z sfml do korzystania z sieci. Ale kody nie skompilowaną bibliotekę.
Na początku wchodził problem w kompilacji. Nie używałem we wszystkich polikach "StdAfx.h".
Więc żeby się nie męczyć wyłączyłem wymuszenie korzystania z tej biblioteki.
Przypuszczam że w tym może tkwić problem. Plików jest dużo nie chciało mi się dodawać do każdego po kolei include chyba że to będzie dobre rozwiązanie.
Jeżeli by ktoś wiedział czy to pomoże lub znał inne rozwiązanie to niech napisze.

Mogę też skorzystać z opcji /FORCE:MULTIPLE w linkerze ale nie wiem czy wtedy program zawsze będzie działał poprawnie.
A nie chciałbym żeby zawisną gdyby był jakiś inny sprzęt.

//PS mi tylko strona przed chwilą  lagowała czy innym też?
P-56292
DejaVu
» 2012-05-08 23:50:28
@up: co do lagów: true - też je miałem - zgłosiłem je - ponoć ktoś inny również je zgłosił i problem jest rozwiązywany (choć w zasadzie obecnie dla nas jest już nieodczuwalny).

/edit:
Co do błędu: skompiluj bibliotekę SFML w tym samym trybie co projekt, tj. jeżeli SFML został skompilowany w trybie linkowania dynamicznego to projekt również powinien używać linkowania dynamicznego. Ta sama uwaga tyczy się linkowania statycznego.
P-56300
Admixior
Temat założony przez niniejszego użytkownika
» 2012-05-08 23:59:00
Oprócz tego dołączyłem kody z sfml do korzystania z sieci. Ale kody nie skompilowaną bibliotekę.

Kody źródłowe dołączyłem zamiast biblioteki bo je trochę zmieniałem.
P-56304
DejaVu
» 2012-05-09 00:16:17
Mimo wszystko coś zrypałeś z konfiguracją. Wejdź we właściwości każdego projektu, zakładka C/C++ i tam sprawdź, czy wszystkie projekty mają jednakowe "Runtime Library" (a najlepiej jednakową konfigurację wszystkich opcji). Jeżeli z neta dostałeś pliki *.dll do SFML-a i nie kompilowałeś ich samodzielnie to znaczy, że musisz doczytać w jakim trybie "Runtime Library" była skompilowana owa biblioteka, a następnie taki sam tryb ustawić we własnym projekcie. Prościej opisać się tego nie da.
P-56308
Admixior
Temat założony przez niniejszego użytkownika
» 2012-05-09 01:00:19
hmm...
Jeżeli z neta dostałeś pliki *.dll do SFML-a
 ja mam kody źródłowe i je dołączyłem do projektu.
I mam tylko jeden projekt ale kilka plików *.cpp w tym kilka plików (np IP Address.cpp SelectorBase.cpp ...)
W plikach niezwiązanych z kodem źródłowym sfml (ale użwających go) mam dołączone wszędzie StdAfx.h a w samym kodzie sfml tego nie mam i zastanawiam się czy w tym nagłówku coś nie będzie co powoduje inną definicje new i delete niż jeżeli by się tego nie użyło...
P-56309
DejaVu
» 2012-05-09 01:23:02
SFML wykorzystuje również inne biblioteki - te inne biblioteki też były skompilowane w określonym trybie i zapewne się gryzą z tym, który masz obecnie wybrany.
P-56311
Admixior
Temat założony przez niniejszego użytkownika
» 2012-05-09 19:05:20
Z tym że ja ściągnąłem z neta kod źródłowy sfml i inne rzeczy przy okazji. Do mojego projektu wykorzystuje sam kod źródłowy.
W każdym bądź razie nie dołączam do projektu żadnej innej biblioteki dll czy lib. Tylko kompilator dołącza co chce.
Co ciekawsze w Linker->Input->Additional Dependiences - nie mam żadnej biblioteki. Nawet tych co są domyślne i zawsze je tam widzę nie mogąc je zmienić.

Teraz próbowałem dodać StdAfx.h do każdego projektu i włączyłem używanie precompiled headers, a że pliki źródłowe miałem w różnych folderach no to...
#include "..\StdAfx." //Błąd inkluduje to przed bez inkludowania StdAfx.h

To się nazywa inteligencja... :)
P-56324
Admixior
Temat założony przez niniejszego użytkownika
» 2012-05-09 20:41:32
Problem rozwiązany jednak moje przypuszczenia co do nagłówka stdafx.h były niebezpodstawne.
Trzeba było dodać ją do każdego pliku źródłowego SFML.
Widocznie MFC definiuje własne operatory new i delete które są inne niż domyślne. I są one w zdeklarowane w StdAfx.h
P-56346
« 1 »
  Strona 1 z 1