Итак, я создал общий make-файл, чтобы скомпилировать его в различные выходные данные библиотеки, где на моем выходе есть ls -l папка дает:
Код: Выделить всё
libmytest.a
libmytest.so -> libmytest.so.1.0
libmytest.so.1 -> libmytest.so.1.0
libmytest.so.1.0
Теперь у меня есть make install< Цель /code> в моем файле make, которая в основном копирует заголовок в /usr/local/include и все эти файлы библиотеки в /usr/local/lib
Затем я создал еще один тестовый файл cpp под названием usertest.cpp (извините за не очень образные/описательные имена), который ссылается на файлы библиотеки.
Я собирал разными способами:
Код: Выделить всё
g++ -Wall -Werror -I. -lmytest
Код: Выделить всё
g++ -Wall -Werror -I. -lmytest -static
Код: Выделить всё
g++ -Wall -Werror -I. -lmytest
Код: Выделить всё
g++ -Wall -Werror -I. -lmytest -static
Код: Выделить всё
g++ -Wall -Werror -I. -lmytest
Код: Выделить всё
g++ -Wall -Werror -I. -lmytest -static
Код: Выделить всё
1. 7736 - Makes sense, all libs dynamically linked
2. 19674488 - Makes sense, all libs statically linked
3. 64908 - hmm... not really sure why
4. 19674488 - Makes sense, same as 2.
5. 7736 - Makes sense, same as 1.
6. failed - Makes sense, no .so files!
- для 1. Я полагаю, что система сначала ищет библиотеки .so, а затем библиотеки .a?
- Для 3. Что здесь произошло? - он динамически связывает системные библиотеки, но когда он видит мою .a-библиотеку, он динамически связывает ее?
Примечание все выходные данные работают нормально и вызывают функции из библиотеки.
Подробнее здесь: https://stackoverflow.com/questions/478 ... nux-system