Совешенно непонятная ошибка при программировании под samba

Автор: Bircoph Дата: 10.07.2004 00:25 Нужно написать хотя бы простейшую программку с использованием
функций samba. Вот что я пытаюсь компилировать:
---
#include <libsmbclient.h>
int main(void) { smbc_opendir("smb://";-); return 0; }
---
Получаю ошибку:
---
gcc smbpr.c
/tmp/ccgL5291.o(.text+0x19): In function `main':
: undefined reference to `smbc_opendir'
collect2: ld returned 1 exit status
---
Пакет samba-2.2.7a-8.9.0asp установлен, файлы
/usr/include/libsmbclient.h и/usr/lib/libsmbclient.a
есть, вызываемая функция в хедере описана.

Совершенно не понимаю, в чем причина таеой ошибки.
Подскажите, куда копать, что делать? Блин, обидно, не могу
из-за этого включить поддержку smb в mplayer.
Re: Совешенно непонятная ошибка при программировании под samba 10.07.2004 15:11Bircoph Не помогает, результат тот же. Я уже подозреваю, что кривая
библиотека, хотя, работает же konqueror с smbclient, значит я
что-то не то делаю... 8-/
Re: Совешенно непонятная ошибка при программировании под samba 10.07.2004 20:31serg2003 Немного не из той оперы : в делюксе есть пакет редхат-конфиг-самба .
Это сервер с виндовым интерфейсом , в нем сначала расшариваешь у себя
каталоги , потом раздаешь на них права по сетке виндовым юзверям .
При установке пакет ложится в каталог /usr/share/redhat-config-samba
Правда , там нет ни строчки си-шного кода , там все на питоне
и все открыто , интерфейс через видгеты .
Прикольный синтаксис у языка .
Вот , например , кусок :

class AddUserWin:

def __init__(self, samba_user_win, samba_user_data, xml):
self.samba_user_win = samba_user_win
self.samba_user_data = samba_user_data

self.admin = libuser.admin()

self.add_user_win = xml.get_widget("add_user_win";-)
self.add_user_win.connect("delete-event", self.on_add_user_cancel_button_clicked)
user_win = xml.get_widget("user_win";-)

self.add_user_win.set_transient_for(user_win)
self.add_user_win.set_icon(mainWindow.iconPixbuf)
self.user_option_menu = xml.get_widget("user_option_menu";-)
self.windows_user_entry = xml.get_widget("windows_user_entry";-)
self.password_entry = xml.get_widget("password_entry";-)
self.confirm_entry = xml.get_widget("confirm_entry";-)
self.add_user_ok_button = xml.get_widget("add_user_ok_button";-)
self.user_table = xml.get_widget("user_table";-)
self.user_label = None
...
Re: Совешенно непонятная ошибка при программировании под samba 11.07.2004 02:36Bircoph > Немного не из той оперы : в делюксе есть пакет
> редхат-конфиг-самба

В express он тоже есть :Улыбка)

Но я предпочитаю руками править smb.conf - оно как-то
удобнее, да и возможностей больше.

И всё же, как с С быть? Почему не компилмтся зараза?
Re: Совешенно непонятная ошибка при программировании под samba 11.07.2004 15:52KirG0FF Потому, что линкер не видит твою библиотеку. Копать в сторону есть ли /usr/lib в путях для поиска библиотек.
Re: Совешенно непонятная ошибка при программировании под samba 11.07.2004 19:13Bircoph А где прописываются эти пути?
А, вообще, странно: в /usr/lib лежит куча библиотек, и они
работают.

Меня вот что настораживает: почему библиотека зовется
libsmbclient__.a__, а не libsmbclient__.so__
Re: Совешенно непонятная ошибка при программировании под samba 11.07.2004 23:02serg2003 Я щас посмотрел в исходниках 3-й самбы :
определение функции идет в хидере libsmbclient.h :
int smbc_opendir(const char *durl);
сама функция прописана в библиотеке libsmb_compat.c
int smbc_opendir(const char *durl)
{
SMBCFILE * file;
int fd;

file = statcont->opendir(statcont, durl);
if (!file)
return -1;

fd = add_fd(file);
if (fd == -1)
statcont->closedir(statcont, file);

return fd;
}

пример вызова - в одном из файлов проекта tree.c :
if ((dh = smbc_opendir(path)) < 0) {
Т.е. первое , что приходит в голову - может , ты просто неправильно
ее вызвал ?
Re: Совешенно непонятная ошибка при программировании под samba 11.07.2004 23:22Bircoph 2 serg2003:

Я же привел текст программы в самом начале. Вот вызов
функции:
---
smbc_opendir("smb://";-);
---
Что тут неправильного?
Re: Совешенно непонятная ошибка при программировании под samba 12.07.2004 14:13bigbiker >> Меня вот что настораживает: почему библиотека зовется
>>libsmbclient.a, а не libsmbclient.so

Насколько я понимаю libsmbclient.a - для статической компиляции.
Re: Совешенно непонятная ошибка при программировании под samba 21.07.2004 14:45reboot 2Bircoph:
По-моему, нужна еще инициализация с помощью smbc_init, Цитата из libsmbclient.h: "Initialize the samba client library. Must be called before using any of the smbclient API function"
Re: Совешенно непонятная ошибка при программировании под samba 29.07.2004 06:47E$h Варианты:
1. Не линкуется библиотека
Лечение: gcc smbpr.c -o smbpr -L/usr/lib -lsmbclient
Линкер прилинкует библиотеку libsmbclient.so и если ее не найдет то тогда возьмет libsmbclient.a

2. Библиотека линкуется, но неправильно вызвана функция (т.е. ее нет в библиотеке ее просто)
Лечение: читать мануалы. Пробовать собрать примеры из документации. Искать ошибку в исходнике. Вполне возможно что надо прилинковать еще одну библиотеку - попробуй прилинковать libsmb*
Re: Совешенно непонятная ошибка при программировании под samba 15.01.2005 15:46Bircoph История родолжается (летом я на это забил).

Теперь при попытке компиляции любой программы (в т.ч. и из
сопутсвующей к самбе документации), использующей
libsmbclient, получаю вот что:
---
gcc testsmbc.c -lsmbclient
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(system.po)(.text+0x1042): In function `sys_dlopen':
: undefined reference to `dlopen'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(system.po)(.text+0x1072): In function `sys_dlsym':
: undefined reference to `dlsym'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(system.po)(.text+0x109a): In function `sys_dlclose':
: undefined reference to `dlclose'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(system.po)(.text+0x10c3): In function `sys_dlerror':
: undefined reference to `dlerror'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1d01): In function `automount_lookup':
: undefined reference to `yp_get_default_domain'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1d54): In function `automount_lookup':
: undefined reference to `yperr_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1e6d): In function `automount_lookup':
: undefined reference to `yp_match'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1f24): In function `automount_lookup':
: undefined reference to `yperr_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(username.po)(.text+0x923): In function `user_in_netgroup_list':
: undefined reference to `yp_get_default_domain'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0x72b): In function `read_socket_with_timeout':
: undefined reference to `SSL_read'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0x902): In function `read_socket_with_timeout':
: undefined reference to `SSL_read'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0xa91): In function `read_with_timeout':
: undefined reference to `SSL_read'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0xbb3): In function `read_with_timeout':
: undefined reference to `SSL_read'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0xd96): In function `read_data':
: undefined reference to `SSL_read'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0xe85): In function `write_data':
: undefined reference to `SSL_write'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util_sock.po)(.text+0xf7d): In function `write_socket_data':
: undefined reference to `SSL_write'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x46): In function `ssl_verify_cb':
: undefined reference to `X509_get_issuer_name'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x5a): In function `ssl_verify_cb':
: undefined reference to `X509_NAME_oneline'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x314): In function `ssl_temp_rsa_cb':
: undefined reference to `RSA_generate_key'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x333): In function `sslutil_init':
: undefined reference to `SSL_load_error_strings'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x338): In function `sslutil_init':
: undefined reference to `SSL_library_init'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x38d): In function `sslutil_init':
: undefined reference to `SSLv23_method'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x395): In function `sslutil_init':
: undefined reference to `SSL_CTX_new'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x444): In function `sslutil_init':
: undefined reference to `SSL_CTX_load_verify_locations'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x464): In function `sslutil_init':
: undefined reference to `SSL_CTX_set_tmp_rsa_callback'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x4a7): In function `sslutil_init':
: undefined reference to `SSL_CTX_set_verify'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x4c4): In function `sslutil_init':
: undefined reference to `SSL_load_client_CA_file'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x4d6): In function `sslutil_init':
: undefined reference to `SSL_CTX_set_client_CA_list'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x505): In function `sslutil_init':
: undefined reference to `SSL_CTX_set_cipher_list'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x50f): In function `sslutil_init':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x527): In function `sslutil_init':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x577): In function `sslutil_init':
: undefined reference to `SSL_CTX_set_default_verify_paths'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x584): In function `sslutil_init':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x594): In function `sslutil_init':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x5da): In function `sslutil_init':
: undefined reference to `SSL_CTX_use_certificate_chain_file'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x5fc): In function `sslutil_init':
: undefined reference to `SSL_CTX_use_PrivateKey_file'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x60e): In function `sslutil_init':
: undefined reference to `SSL_CTX_check_private_key'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x61b): In function `sslutil_init':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x64f): In function `sslutil_init':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x65f): In function `sslutil_init':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x68b): In function `sslutil_init':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x69b): In function `sslutil_init':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x742): In function `sslutil_init':
: undefined reference to `SSL_CTX_ctrl'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x74c): In function `sslutil_init':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x75c): In function `sslutil_init':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x770): In function `sslutil_init':
: undefined reference to `TLSv1_method'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x789): In function `sslutil_init':
: undefined reference to `SSLv2_method'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x793): In function `sslutil_init':
: undefined reference to `SSLv3_method'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x7a4): In function `sslutil_init':
: undefined reference to `RAND_load_file'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x7b1): In function `sslutil_init':
: undefined reference to `RAND_egd'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x851): In function `sslutil_accept':
: undefined reference to `SSL_new'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x85c): In function `sslutil_accept':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x8a6): In function `sslutil_accept':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x8cb): In function `sslutil_accept':
: undefined reference to `SSL_set_fd'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x8dd): In function `sslutil_accept':
: undefined reference to `SSL_accept'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x92a): In function `sslutil_accept':
: undefined reference to `SSL_get_current_cipher'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x932): In function `sslutil_accept':
: undefined reference to `SSL_CIPHER_get_name'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x94b): In function `sslutil_accept':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0x99d): In function `sslutil_accept':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xa61): In function `sslutil_connect':
: undefined reference to `SSL_new'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xa6c): In function `sslutil_connect':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xab6): In function `sslutil_connect':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xadb): In function `sslutil_connect':
: undefined reference to `SSL_set_fd'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xaed): In function `sslutil_connect':
: undefined reference to `SSL_connect'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xb3a): In function `sslutil_connect':
: undefined reference to `SSL_get_current_cipher'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xb42): In function `sslutil_connect':
: undefined reference to `SSL_CIPHER_get_name'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xb5b): In function `sslutil_connect':
: undefined reference to `ERR_get_error'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xbad): In function `sslutil_connect':
: undefined reference to `ERR_error_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(ssl.po)(.text+0xc10): In function `sslutil_disconnect':
: undefined reference to `SSL_free'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(access.po)(.text+0x2d8): In function `string_match':
: undefined reference to `yp_get_default_domain'
collect2: ld returned 1 exit status
---
Сначала подумал на кривизну самбы, изначально была 2.2.7a -
попробовал 2.2.8, 2.2.12 (на ней и остановился), всё собирал
из исходников - всё равно наблюдается точно та же ошибка.

Ладно, возможно, это глюк библиотек openssl, пробовал разные
версии, поставил последнюю (0.9.7e), пересобрал самбу - глюк
остался. Разумеется, ldconfig выполнялся каждый раз.

Подскажите, что делать - уже просто не знаю, куда копать. Да
и ещё: как-то странно, что у меня libsmbclient.so вообще не
создаётся при компиляции самбы, только libsmbclient.a...
Re: Совешенно непонятная ошибка при программировании под samba 15.01.2005 22:38Manwe а -lssl -ldl и тд кто делать будет?
Re: Совешенно непонятная ошибка при программировании под samba 16.01.2005 08:34Bircoph Сделал, спасибо, но теперь валит вот что:
---
gcc testsmbc.c -lsmbclient -lssl -ldl
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1d01): In function `automount_lookup':
: undefined reference to `yp_get_default_domain'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1d54): In function `automount_lookup':
: undefined reference to `yperr_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1e6d): In function `automount_lookup':
: undefined reference to `yp_match'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(util.po)(.text+0x1f24): In function `automount_lookup':
: undefined reference to `yperr_string'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(username.po)(.text+0x923): In function `user_in_netgroup_list':
: undefined reference to `yp_get_default_domain'
/usr/lib/gcc-lib/i386-asplinux-linux/3.2.2/../../../libsmbclient.a(access.po)(.text+0x2d8): In function `string_match':
: undefined reference to `yp_get_default_domain'
---
Похоже, опять не прилинковал что-то. Как это лечить, вообще,
как узнать, что именно нужно линковать (если прогу не сам
писал) и Makefile нет или он с ошибкой?

Решение нашел, но некрасивое: провёл тупой поиск среди всех
файлов в /lib на предмет содержание строки yp_match -
оказалось, что это libnsl, то бишь не хватало -lnsl. Но как в
общем сучае решать эту проблему? Как грамонто найти нужную
библиотеку?
Re: Совешенно непонятная ошибка при программировании под samba 16.01.2005 10:33Manwe ну можно не строку искать, а выводить для каждой либы список символов командой nm, а потом грепить его. так быстрее будет.

а нормального решения нет. надо заранее знать что линковать.
Re: Совешенно непонятная ошибка при программировании под samba 16.01.2005 11:03Bircoph nm почему-то не хочет ничего показывать:
---
nm -a /lib/libnsl-2.3.2.so
nm: /lib/libnsl-2.3.2.so: no symbols
---
RSS-материал