Linked не может найти символы, но библиотеки читаются и символы существуют

Я пытаюсь скомпилировать свой проект и получаю ошибки undefined reference. например.:

installertest.cpp:(.text+0x9d1): undefined reference to `XmlRpcValue::makeArray()'
...
installertest.cpp:(.text+0xede): undefined reference to `dbcancel'
installertest.cpp:(.text+0xefd): undefined reference to `dbfcmd'
installertest.cpp:(.text+0xf0f): undefined reference to `dbsqlexec'
installertest.cpp:(.text+0xf2d): undefined reference to `SHA1_Init'
...

Моя команда -строка:

g++ -o installertest \
    -lsybdb \
    -lxmlrpc \
    -lxmlrpc_cpp \
    -lxmlrpc_xmlparse \
    -lxmlrpc_xmltok \
    -lxmlrpc_util \
    -lxmlrpc++ \
    -lxmlrpc_server_cgi \
    -lssl \
    -std=c++0x \
    ContractData.o installertest.o

objdump -Tпоказывает, что символы находятся в файле.so. например.:

libsybdb.so:
...
0000000000011c30 g    DF.text  0000000000000083  Base        dbcancel
...

/usr/lib/libxmlrpc_cpp.so:
...
0000000000002e78 g    DF.text  0000000000000092  Base        _ZN11XmlRpcValue9makeArrayEv
...

strace показывает, что файлы библиотеки открываются и читаются компоновщиком:

...
[pid  5019] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libsybdb.so", {st_mode=S_IFREG|0644, st_size=421608,...}) = 0
[pid  5019] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libsybdb.so", O_RDONLY) = 7
[pid  5019] fcntl(7, F_GETFD)           = 0
[pid  5019] fcntl(7, F_SETFD, FD_CLOEXEC) = 0
[pid  5019] fstat(7, {st_mode=S_IFREG|0644, st_size=421608,...}) = 0
[pid  5019] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b16c200c000
[pid  5019] lseek(7, 0, SEEK_SET)       = 0
[pid  5019] read(7, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\0\0\0\0\0\0"..., 4096) = 4096
...
[pid  5019] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libxmlrpc.so", {st_mode=S_IFREG|0644, st_size=80936,...}) = 0
[pid  5019] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libxmlrpc.so", O_RDONLY) = 8
[pid  5019] fcntl(8, F_GETFD)           = 0
[pid  5019] fcntl(8, F_SETFD, FD_CLOEXEC) = 0
[pid  5019] fstat(8, {st_mode=S_IFREG|0644, st_size=80936,...}) = 0
[pid  5019] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b16c200d000
[pid  5019] lseek(8, 0, SEEK_SET)       = 0
[pid  5019] read(8, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300?\0\0\0\0\0\0"..., 4096) = 4096
...

Все задействованные файлы ориентированы на x86 -64, а заголовок для библиотек C — extern "C". Я перепробовал все, что мог придумать, и это все еще не свяжется.

Я даже пытался удалить весь код С++ 11 и скомпилировать без переключателя строки команды -, но все равно ничего.

Моя система Ubuntu Precise (12.04 )64 -бит с использованием g++ (Ubuntu/Linaro 4.6.3 -1ubuntu5 )4.6.3 если это поможет. Все пакеты были установлены из менеджера пакетов и установлены пакеты разработки.

Редактировать (2017 -05 -30):Помечен как дубликатhttps://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc
Другой вопрос спрашивает, почему важен порядок аргументов. Порядок аргументации не был известен как проблема, когда задавался вопрос.
Кроме того, предыдущий вопрос не содержит полезного расширения, тогда как этот вопрос показывает проблему.
Предыдущий вопрос можно рассматривать как полезное расширение ответа на этот, но не дублирование.

6
задан Ben Jaguar Marshall 30 May 2017 в 07:04
поделиться