logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++/VS2012 - Multi-threaded (/MT) - Nie można odnaleźć określonego pliku.

ThiefSoul 30 Kwi 2014 21:55 1593 8
REKLAMA
  • #1 13557946
    ThiefSoul
    Poziom 9  
    Posty: 8
    Witajcie,

    zacznę od tego, że w TYM temacie pytałem o kompilację programu, aby nie wołał o żadne DLLki. Dotyczyło to VS2013. Idąc tym śladem zrobiłem to samo w VS2012.

    Ustawiając na Multi-threaded DLL (/MD) - wszystko działa bez zarzutu, ale gdy ustawię Multi-threaded (/MT) to dostaję komunikat, że nie znaleziono mojego pliku .exe. W VS2013 nie miałem tego problemu - dopiero tu.

    Dodam, że pobierałem patcha VS2012.4 - być może to on coś popsuł, ale chcę się jeszcze wstrzymać z instalacją VS bez tego patcha od nowa.

    No i oczywiście pytanie jak to obejść, aby móc to wysłać komuś, kto nie ma owej DLLki ( msvcr110.dll ), a co za tym idzie skompilować to w "trybie" Multi-threaded (/MT).

    Dziękuję i pozdrawiam.

    C++/VS2012 - Multi-threaded (/MT) - Nie można odnaleźć określonego pliku. C++/VS2012 - Multi-threaded (/MT) - Nie można odnaleźć określonego pliku.
  • REKLAMA
  • #2 13558253
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    ThiefSoul napisał:
    to dostaję komunikat, że nie znaleziono mojego pliku .exe.
    Pewnie kompilacja nie przebiega prawidłowo - stąd brak pliku exe.
    Zajrzałeś w log z kompilacji/linkowania ?
  • #3 13558368
    ThiefSoul
    Poziom 9  
    Posty: 8
    Error	22	error LNK1169: one or more multiply defined symbols found	C:\Users\ADAM\documents\visual studio 2012\Projects\SnakeSuper2D\Release\SnakeSuper2D.exe	1
    
    Error	20	error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)	C:\Users\ADAM\documents\visual studio 2012\Projects\SnakeSuper2D\SnakeSuper2D\msvcrt.lib(ti_inst.obj)
    
    Error	21	error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)	C:\Users\ADAM\documents\visual studio 2012\Projects\SnakeSuper2D\SnakeSuper2D\msvcrt.lib(ti_inst.obj)


    Takie są błędy, ale jak mam je naprawić to nie mam pojęcia. To nawet nie wygląda na problemy bezpośrednio z moim kodem ( chociaż pusta funkcja main kompiluje się wporządku ). Jeszcze raz podkreślam, że błędy są przy Multi-threaded (/MT), a przy Multi-threaded DLL(/MD) już działa.
  • REKLAMA
  • #4 13573877
    DragothOne
    Poziom 16  
    Posty: 192
    Pomógł: 16
    Ocena: 4
    Najprawdopodobniej problem jest z tym jak używasz eksportu funkcji. Przejrzyj dokładnie jak wykorzystujesz funkcje z DLL'ki.

    Problem jest z twoim kodem (jeśli DLL jest twoja) lub ze sposobem w jaki używasz DLL'ki.
  • REKLAMA
  • #5 13573942
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Jednym zdaniem: próbujesz podlinkować więcej bibliotek do jednego programu niż linkerowi potrzeba .
    ThiefSoul napisał:
    one or more multiply defined symbols found
    ........already defined in

    LIBCMT.lib .....
    msvcrt.lib....
  • #6 13573951
    ThiefSoul
    Poziom 9  
    Posty: 8
    Kodu jest blisko 1000 linijek, więc nie ma sensu bym go wklejał. W każdym razie korzystam z biblioteki graficznej SFML, a program mam rozbity na dwa pliki .cpp ( jeśli to ma jakieś znaczenie ).

    Nie znam się na tym na tyle, aby móc samodzielnie odnaleźć tego typu błędy. Nie wiem nawet gdzie ich szukać. Nie oczekuję, że zrobicie to za mnie, jednak gdyby ktoś podzielił się własnymi doświadczeniami lub podesłał jakiś materiał, w którym mógłbym się dowiedzieć co robię nie tak, byłoby bardzo miło.

    Pokombinuję coś z kodem może coś się przypadkiem uda odkryć, ale to będzie z pewnością przypadek, bo jak już mówiłem nie mam pojęcia jak się za to zabrać - na co zwracać uwagę.

    EDIT. ( gdy pisałem wiadomość to tej poprzedniej jeszcze nie było ) - korzystam z biblioteki SFML i korzystałem z konfiguracji opisanej tutaj. Własnych plików nie dołączam poza tym, że kod znajduje się w 2 plikach .cpp, ale tylko w jednym includeuje wszystko czego potrzebuję, więc to nie powinno być problemem.
  • #7 13573953
    DragothOne
    Poziom 16  
    Posty: 192
    Pomógł: 16
    Ocena: 4
    mickpr, to jest tylko objaw złego wykorzystania eksportow/importow. Kompilator głupieje i próbuje linkować coś co należy do biblioteki do programu który z biblioteki korzysta.
    To nie jest źródło problemu co piszesz.
  • #8 13573969
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    mickpr napisał:
    próbujesz podlinkować więcej bibliotek do jednego programu niż linkerowi potrzeba
    DragothOne napisał:
    próbuje linkować coś co należy do biblioteki do programu który z biblioteki korzysta
    Gdzieś napisałem nieprawdę?

    Kolega najprawdopodobniej próbuje zlinkować program w trybie MT (znaczy z LIBCMT.lib), podczas gdy biblioteka była zlinkowana dynamicznie z msvcrt.lib).
    Następuje konflikt, bo linker nie wie "co jest właściwe", bo znajduje rzeczone "type info" w jednej (LIBCMT.lib -> typinfo.obj) i w drugiej bibliotece (msvcrt.lib - > ti_inst.obj).
  • REKLAMA
  • #9 13573999
    DragothOne
    Poziom 16  
    Posty: 192
    Pomógł: 16
    Ocena: 4
    Po takim wytłumaczeniu, nigdzie :)

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napotkał problem podczas kompilacji programu w Visual Studio 2012 w trybie Multi-threaded (/MT), gdzie otrzymuje komunikat o braku pliku .exe. W trybie Multi-threaded DLL (/MD) wszystko działa poprawnie. Problemy mogą wynikać z konfliktu między bibliotekami, ponieważ użytkownik korzysta z biblioteki SFML i może próbować linkować program w trybie MT z LIBCMT.lib, podczas gdy biblioteka była zlinkowana dynamicznie z msvcrt.lib. Użytkownik prosi o pomoc w rozwiązaniu problemu oraz wskazówki dotyczące błędów kompilacji i linkowania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA