Я только что создал общий lib на Ubuntu, и когда я пытаюсь использовать функцию, приложение, которое загружает библиотеку, сообщает о 'xxx' символе, не найденном.
Я хочу проверить (т.е. список) функции, которые экспортируются моей библиотекой, таким образом, я могу исследовать эту проблему далее.
Соответствующие детали:
ОС: компилятор Ubuntu 9.10: gcc 4.4.1 компоновщика: GNU ld 2.20
Попробуйте утилиту nm.
GNU nm перечисляет символы из объектных файлов objfile .... Если никакие объектные файлы не указаны в качестве аргументов, nm предполагает fi le a.out. [ссылка]
Да, std:: vector < T >:: push _ back ()
создает копию аргумента и сохраняет ее в векторе. Если требуется сохранить указатели на объекты в векторе, создайте std:: vector < что угодно * >
вместо std:: vector < что угодно >
.
Однако необходимо убедиться, что объекты, на которые ссылаются указатели, остаются действительными, в то время как вектор содержит ссылку на них (интеллектуальные указатели, использующие идиом RII, решают проблему).
-121--677537-SQL Server предоставляет несколько хороших средств, позволяющих определить, какие индексы действительно используются. В этой статье, http://www.mssqltips.com/tip.asp?tip=1239 , приводятся некоторые запросы, которые позволяют лучше понять, сколько используется индекс, а не сколько он обновляется.
-121--712619- Находится ли ваша общая библиотека в пути загрузки библиотеки или в пути поиска приложения во время выполнения? Похоже, динамический компоновщик не может найти вашу библиотеку. Попробуйте запустить ldd
в приложении, чтобы узнать, можно ли найти библиотеку во время выполнения, например :
$ ldd /usr/bin/less
linux-gate.so.1 => (0x0072a000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00c68000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x007c7000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00286000)
/lib/ld-linux.so.2 (0x002a1000)
Для получения дополнительной информации о путях поиска в библиотеке см. справочную страницу ld.so (8) .