Неопределенная ссылка на '_method' - PullRequest
0 голосов
/ 02 апреля 2012

Я считаю, что с опциями моего компилятора происходит что-то очень странное.Когда я компилирую class.c, он компилируется без ошибок.Однако, когда я пытаюсь создать .dll, я получаю много ошибок:

undefined reference to '_method' 

_method - это любое количество методов в классе. C

Я компилирую свой код с помощью следующего:

gcc -c -g -w -I/path to include dir/include -MMD -MP -MF .../class.o.d -o class.o class.c

Мой синтаксис ссылки следующий:

gcc -Wl,--add-stdcall-alias -m32 -shared -o dist/libdt.dll class.o

Например, одна из неопределенных ссылок - undefined refence to '_min_size' В class.c, однако выглядит так:

if(min_size){ dsize=min_size; }

Под min_size в class.c нет подчеркивания.Я уверен, что это как-то связано с моим синтаксисом компиляции / ссылки, но я просто не вижу этого.Любая помощь приветствуется!Спасибо!

PS: я использую Netbeans и Cygwin.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Обновление: Я снова просмотрел параметры своего компилятора, потому что что-то не давало мне покоя в отношении предоставленных параметров.Я понял это: в моем файле class.h у меня были некоторые операторы #if defined(__STRICT_ANSI__) и #if defined(__WIN32__): я никогда не определял, что они были установлены.

Для справки, которую я сейчас предоставляю, буду использовать следующие параметры компилятора:

gcc -ansi -Wall -Waggregate-return -Wcast-align -Wimplicit -Wmissing-prototypes -Wnested-externs -Wno-parentheses -DFIFO -D__Win32__ -D_NT_SOURCE -c -o class.o class.c

После изменения параметров компилятора я больше не получаю ошибок о неопределенных ссылках!Я надеюсь, что это поможет некоторым людям в будущем.:)

0 голосов
/ 02 апреля 2012

_ - это просто префикс, который требует соглашение о вызовах stdcall для Windows, добавляемое компилятором.

Если у вас есть extern size_t min_size;Вы только что объявили min_size.то есть вы сказали компилятору, что где-то будет size_t min_size;определены.Вы должны фактически определить эту переменную где-нибудь (например, в вашем class.c, поместите size_t min_size; там.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...