| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > [RPC][Solaris] Не собирается исполняемый файл |
| Автор: Manaarina 6.1.2012, 20:21 | ||||||
| Пишу учебную программку на C, которая является приложением типа клиент-сервер: на сервере перемножает полиномы, а на клиенте вводятся индексы и потом выводиться результат. При компиляции gcc ругается на функцию Clnt_create и на функцию mltproc_1(эта функция которая создается rpcgen -ом). 1) Вопрос, что я не так делаю?(возможно не хватает заголовочных файлов или чего-нибудь ещё?) Udefined first symbol referenced Clnt_create client.o Udefined first symbol referenced mltproc_1 mlt_svc.o mlt.x
server.c
client.c
|
| Автор: Manaarina 7.1.2012, 11:25 |
| Разобралась с клиентом(там функция clnt_create с большой у меня была =\) Осталась проблема с сервером. |
| Автор: xvr 7.1.2012, 11:57 |
| Вы стабы, сгенеренные rpcgen'Ом не забыли включить в линковку? |
| Автор: Manaarina 7.1.2012, 13:56 |
| А мне незнакомы слова "стаб" или "линковка" Если стабы - файлы сгенерированные rpcgen-ом все включаю. Но возможно это что то другое? =( |
| Автор: xvr 8.1.2012, 20:38 |
Они самые. В одном из .с файлов должна быть ваша функция mltproc_1. Покажите makefile |
| Автор: Manaarina 19.1.2012, 19:57 | ||
Увы, пропала на некоторое время, но всё еще надеюсь на ответ.
|
| Автор: bsa 19.1.2012, 20:03 | ||
Manaarina, у тебя в правилах не указано куда компилятор должен класть результат своей работы:
|
| Автор: Manaarina 19.1.2012, 20:43 |
| bsa ну вообще то он у меня по умолчанию кладет их с такими же названиями но с расширениями .о в ту папку. короче объектные файлы появляются все. PS На всякий случай я только что проверила, откомпилировав объектные вручную: все получились. при попытке скомпилировать клиент - запускается. при попытке скомпилировать сервер - та же ошибка. |
| Автор: xvr 19.1.2012, 21:47 |
| Ну makefile почти правильный Показывайте исходники |
| Автор: Manaarina 19.1.2012, 21:51 | ||
не тот makefile недоправленный верно =) а какие исходники вы хотели бы посмотреть? |
| Автор: xvr 19.1.2012, 21:57 |
Сам rpc файл, то, что нагенерил rpcgen ну и те места, где эти rpc функции используются |
| Автор: Manaarina 20.1.2012, 10:55 | ||||||
| Сгенерированные файлы: mlt_clnt.c
mlt_svc.c - в этом файле она тоже должна быть, но ее нет.
mlt_xdr.c
Прочие файлы выше. |
| Автор: xvr 20.1.2012, 11:56 |
| У вас файл mlt_svc.c обрезан Судя по всему в вашем сервере ваша процедура должна называться mltproc_l (а не mltproc_l_svc как у вас, см server.c строка 8) Она не должна там быть - она должна быть у вас, а этот файл ее будет вызывать |
| Автор: Manaarina 20.1.2012, 12:16 | ||||
так хорошо посмотрела сервер - исправила(запомнила если что), но ругается то он по прежнему, на mlt_proc_1 в файле mlt_svc.о. Ругается, опять же насколько я понимаю на то что функция не объявлена(?) - где-то должно быть это объявление(самой функции). Кстати наверно я получается не все показала: вот mlt.h - 25 строка - это объявление? так? mlt.h ко всем этим файлам присоединен(прям там первым файлом), он также сгенерирован rpcgen.
|
| Автор: xvr 20.1.2012, 12:23 |
Это прототип, а реализованна эта функция должна быть в каком то из ваших файлов. Т.е. ее должны написать вы сами (для сервера) Так все же mlt_proc_1 или mlt_proc1 или mltproc_1 ? |
| Автор: Manaarina 20.1.2012, 13:02 | ||
mltproc_1. Так теперь у меня есть материал для размышления, спасибо. |