ld поиск неправильных путей каталога

Я связываюсь с библиотекой в ​​своей файловой системе, используя ld .

Когда я запускаю команду ld -verbose -lmylib , я получаю следующую информацию:

 attempt to open /usr/x86_64-linux-gnu/lib64/libmylib.so failed attempt to open /usr/x86_64-linux-gnu/lib64/libmylib.a failed attempt to open //usr/local/lib/x86_64-linux-gnu/libmylib.so failed attempt to open //usr/local/lib/x86_64-linux-gnu/libmylib.a failed attempt to open //usr/local/lib64/libmylib.so failed attempt to open //usr/local/lib64/libmylib.a failed attempt to open //lib/x86_64-linux-gnu/libmylib.so failed attempt to open //lib/x86_64-linux-gnu/libmylib.a failed attempt to open //lib64/libmylib.so failed attempt to open //lib64/libmylib.a failed attempt to open //usr/lib/x86_64-linux-gnu/libmylib.so failed attempt to open //usr/lib/x86_64-linux-gnu/libmylib.a failed attempt to open //usr/lib64/libmylib.so failed attempt to open //usr/lib64/libmylib.a failed attempt to open //usr/local/lib/libmylib.so failed attempt to open //usr/local/lib/libmylib.a failed attempt to open //lib/libmylib.so failed attempt to open //lib/libmylib.a failed attempt to open //usr/lib/libmylib.so failed attempt to open //usr/lib/libmylib.a failed ld: cannot find -lmylib 

Я смущен, почему он пытается открыть файлы с префиксом // . Это не относится к другому компьютеру. Я попытался изменить LIBRARY_PATH , LD_LIBRARY_PATH , мою PATH и т. Д., Но ничего не работает. Я смотрел онлайн, но ничего не могу найти. Где эти пути установлены?

Благодарю.

Проблема здесь заключается в том, что вы пытаетесь установить связь с библиотекой mylib , но эта библиотека не находится в пути поиска библиотеки системы, или она вообще не существует. Вы, пожалуйста, расположите его в нужном месте. Если библиотека находится в другом каталоге, который не находится в пути поиска библиотеки, вы можете добавить его с параметром -L в ld, например ld -verbose -L -lmylib .

Что касается двойной косой черты, которую вы видите, это не проблема, так как больше, чем больше слэшей, интерпретируется как один косой чертой в Linux, то есть //foo/bar совпадает с / foo / bar`, поэтому не нужно нужно беспокоиться об этом.

Что касается разницы пути поиска, то на Fedora путь поиска по умолчанию:

 SEARCH_DIR("/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); 

На Ubuntu это:

 SEARCH_DIR("/usr/x86_64-linux-gnu/lib64"); SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib/x86_64-linux-gnu"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib/x86_64-linux-gnu"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); 

Поэтому Ubuntu запускает каждый путь с префиксом ‘=’, теперь давайте посмотрим, что делает ld для этого:

Если searchdir начинается с «=», то «=» будет заменен префиксом sysroot, управляемым опцией -sysroot или указанным при настройке компоновщика.

Это означает, что = будет заменен системным корнем, что наиболее похоже на / для системы Linux. Вот почему вы видите двойные косые черты на Ubuntu, а не на Fedora.