Портирование vsftpd в Rust - PullRequest
1 голос
/ 10 ноября 2019

Я портирую часть FTP-сервера vsftpd на Rust для моего проекта. Домашняя страница vsftpd

Я переписал файл opts.c как opts.rs, скомпилировал его как статическую библиотеку ржавчины в объектном формате как opts.o.

У меня естьсвязал все остальные .o файлы для соответствующих .c файлов как CObject.o. Теперь я пытаюсь получить исполняемый файл vsftpd, используя Makefile, следующим образом

clang -o vsftpd CObject.o opts.o /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-c78f872a5c746c09.so -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now './vsf_findlibs.sh

Но теперь я получаю следующие ошибки компоновки.

(.text.handle_opts+0x31): undefined reference to `str_upper(mystr*)'
(.text.handle_opts+0xbc): undefined reference to `str_equal_text(mystr const*, char const*)'
(.text.handle_opts+0x146): undefined reference to `vsf_cmdio_write(vsf_session*, int, char const*)'
(.text.handle_opts+0x1d1): undefined reference to `vsf_cmdio_write(vsf_session*, int, char const*)'

Но CObject.o таблица символов содержит записи для всех вышеперечисленных записей.
Вывод readelf -s CObject.o | grep -E '(str_upper|str_equal_text|vsf_cmdio_write)' равен

project@mylaptop:~/vsftpd-3.0.3-rustport$ readelf -s CObject.o | grep -E '(str_upper|str_equal_text|vsf_cmdio_write)'
 834: 0000000000000a30    54 FUNC    GLOBAL DEFAULT    1 vsf_cmdio_write
1004: 0000000000000a70    54 FUNC    GLOBAL DEFAULT    1 vsf_cmdio_write_hyphen
1061: 0000000000000b90    13 FUNC    GLOBAL DEFAULT    1 vsf_cmdio_write_str
1122: 0000000000000b10    97 FUNC    GLOBAL DEFAULT    1 vsf_cmdio_write_exit
1127: 0000000000000ab0    94 FUNC    GLOBAL DEFAULT    1 vsf_cmdio_write_raw
1211: 0000000000007df0    66 FUNC    GLOBAL DEFAULT    1 str_upper
1353: 0000000000007ca0    85 FUNC    GLOBAL DEFAULT    1 str_equal_text
1384: 0000000000000b80    13 FUNC    GLOBAL DEFAULT    1 vsf_cmdio_write_str_hyphe

Может кто-нибудь помочь мне решить эту проблему?

...