Błąd kompilacji "unresolved external"

0

Ok, to co teraz robie mnie przerasta... po prostu...

probuje zrobic prosty hello world z tego linka https://github.com/alanxz/rabbitmq-c (Running the examples)

Jako ze cos includowanie tego utils.h i utils.c nie chcialo mi pojsc wkleilem to do jednego skryptu (mecze sie juz od dluzszego czasu i chce ten glupi hello world w koncu zrobic)

tutaj mam swoj wlasny "ampq_listen"
http://pastebin.com/94t8ykQi

ogolnie jednyna roznica jest taka ze wklilem util.c oraz zamiast main zrobilem funkcje

int foo(int argc, char* const  argv[])

ktora wywoluje sobie w main. Ten kod DZIALA. W sensie kompiluje sie ;)

Dokladnie to samo zrobilem z drugim plikem. http://pastebin.com/6wFHPWHE
Okazalo sie ze jest jakis problem z linkerem... Cos mu nie pasowalo z moja funkcja

Error	1	error LNK2019: unresolved external symbol _amqp_ssl_socket_new referenced in function "int __cdecl foo(int,char * const * const)" (?foo@@YAHHQBQAD@Z)	
Error	2	error LNK2019: unresolved external symbol _amqp_ssl_socket_set_cacert referenced in function "int __cdecl foo(int,char * const * const)" (?foo@@YAHHQBQAD@Z)	
Error	3	error LNK2019: unresolved external symbol _amqp_ssl_socket_set_key referenced in function "int __cdecl foo(int,char * const * const)" (?foo@@YAHHQBQAD@Z)

Sadze ze problem lezy w pliku amqp_ssl_socket. Jaki? Nie mam zielonego pojecia, wiec wszystkie polecenia z ssl zamienilem na tcp
http://pastebin.com/UN8NpL7b
Czy kod poprawny nie wiem, chcialem pozbyc sie bledu.
Teraz dostaje najbardziej absurdalny blad.

Error	1	error C2146: syntax error : missing ';' before identifier 'properties'	d:\sw_dev\servicetooling\trunk\rabbitmqtestsemptyproject\include\amqp.h	
Error	2	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	d:\sw_dev\servicetooling\trunk\rabbitmqtestsemptyproject\include\amqp.h

na 100% tam bledu nie ma (bo dziala w pierwszej funkcji/projekcie).

EDIT. Jak zakomentuje cala funkcje (zostawie tylko return 0;) to nadal jest taki sam blad.

dodanie znacznika <code class="none"> - @furious programming

0

L O L

#include <amqp_framing.h> 

ten include spowodowal ten blad. Zakomentowalem to i sie kompiluje.

WTF? Dlaczego? Ale ze jak? ;o

0

Trzy pytania:

  1. Nie musisz się czasem z linkować z tą libą?
  2. Co zwraca nm na tej libie/pliku obiektowym? (wklej output)
  3. Czym to kompilujesz? (jaka wesja kompilatora)

Uwaga na boku nie mieszaj "na pałę" C z C++ (patrz default type int i brak include cstdint itd).

0

tak mam podlinkowana ta libke.

Libka jest zrobiona na dll (czyli definicje w dll + deklaracje w libach)

nie mam pojecia co to nm, ale widze ze to cos linuksowego. Niestety pracuje na windowsie (nie moge na linuksie)

Zapomnialem o najwazniejszym czyli kompilatorze ;) Visual studio 2013 standardowa instalacja i konfiguracja.

Tak wiem zeby nie mieszac na pale ;) Na razie chce to uruchomic... co juz zrobilem ale nie dziala tak jak chce (w sensie nie ma hello worlda :(), ale to nie o tym :).

1

Pierwszy błąd to standardowy błąd kiedy nie zlinkujesz odpowiedniej biblioteki. I nie, DLL to nie styknie bo DLL jest ładowana dynamicznie, a błędy jasno mówią że ktoś po prostu woła metody o danych sygnaturach. To znaczy że to trzeba zlinkować z biblioteką statyczną albo dzieloną, tak żeby w chwili kompilacji dostępny był kod metod.

Drugi błąd to standardowy błąd kiedy nie zadeklarujesz jakiegoś typu w C/C++ a próbujesz go używać.

0

@Shalom

Tak tez mi sie wydawalo. I nadal jak przypuszczam brakowalo mi w projekcie openssl dlatego nie dziala.

Ale co do drugiego bledu to musi byc odpowiednia kolejnosc includow i wtedy bedzie dzialac ;)

Z tym drugim ostatni raz spotkalem sie bardzo dawno temu... Wiec najzwyczajniej zapomnialem

edit. Na moje szczescie rozwiazalem to wszystko i plugin nawet dziala :) Teraz sprzatanko dwa dni. Pokazanie managerowi i kolejny tydzien pisanie serwera na pythonie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1