Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
1

Как узнать, какой файл *.a указывать в командной строке линкёра (компилятор g++)?

08.10.2014, 16:25. Показов 1076. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья!
Сейчас я делаю так. Допустим, линкёр выдаёт ошибку:

Bash
1
undefined reference to `ima_funktsii'
Тогда я запускаю утилиту nm:

Bash
1
nm --defined-only -g ima_faila.a
В цикле натравливаю её на все файлы *.a; в строках ввывода ищу такую строку:
" _ima_funktsii"
В каком файле (предположим, "libfaila.a") такая строка встретится, тот и искомый. Пока проканывало. После чего к командной сроке линкёра добавляю ключ -lfaila

После чего скнова линкую, если снова появляется такаая же ошибка (имя ненайденно функции, понятно, бцудет уже другим), повторяю, пока всё не слинкуется

++++++++++++++++++++++++++++++++++++++++++++++=

А вот недавно встретился с таким:
Bash
1
undefined reference to `ima_obekta::ima_funktsii(ima_obekta const&)'
То есть я утилитой nm пробегаюсь по всем файлам *.a, но что в них искать (какую строку? ima_obekta? ima_funktsii? ima_obekta::ima_funktsi?), чтобы найти нужный файл *.a- ума не приложу. Спасибо, кто откликнется. Хотелось бы в ответе минимум угадываний, максимум знаний.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2014, 16:25
Ответы с готовыми решениями:

Как узнать какой процесс какой файл использует?
Здравствуйте, подскажите как можно узнать какой процесс какой файл использует? Преподаватель...

Как узнать, какой функции какой файл *.a соответсвует?
Друзья! Работаю с mingw, вот там надо так: если, допустим, вызываешь API- функцию, то надо...

Как узнать ссылка это или файл из командной строки
Что такое символическая, жёсткая и т.д. ссылка объяснять не надо, как создаётся, какими утилитами,...

Как запустить файл haskell в командной строке windows 10?
помогите пожалуйста разобраться: на лекции дали такой вариант: ./myfile.hs но windows выдает...

6
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.10.2014, 16:45 2
kravam,
Bash
1
nm --defined-only -g --demangle file_name.a | grep ima_obekta::ima_funktsii
а можно и просто ima_funktsii.
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
08.10.2014, 16:50  [ТС] 3
Извините, я не сказал, у меня windows, в mingw нет исполняемого файлв grep.exe
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.10.2014, 16:51 4
kravam, Ну без grep.) Как ты ищешь в выданном не суть важно.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
08.10.2014, 20:45  [ТС] 5
Вот у меня файл такой:
C++
1
2
3
4
5
//main.cpp
#include <hider.h>
int main
{
}
Где hider.h - хидер одной из библиотек. Вот чтобы всё это дело скомпилилось, понадобилось 10(!) файлов *.a. Но это ладно. Но вот ПОИСК этих файлов задача та ещё. По одному я их раньше искал без проблем, а тут 10. Занимает, знаете ли некоторое время. То есть надо эту задачу автоматизировать. В принципе, задача интересная и я бы, наверное, справился, написав программу, работающую примерно так:

C++
1
programma.exe main.exe <путь_к_библиотекам_и_инклудам>
После чего на гора выдалась бы командная строка которую я щас искал полувручную (всё-таки nm у меня по всем папкам с *.a пробегается рекурсивно)

Вопрос в другом- неужели никто до меня этого не делал? А почему я делаю такой вывод- дело в том, что я пихаю этот код в IDE и пробую компилить/перестраивать всё. И вот такие ошибки линкёра вываливаются (так же, как и если компилить в консоли.). Но дело в том, что IDE писали умные ребята. И они знали, для чего нужна та или иная утилита в папке bin (все эти as.exe и прочая.) И ни одну из них не задействовали- сиди, kravam, ищи библиотеки сам.

Значит, такой утилиты в mingw просто нет, которая по экзешнику сама бы определяла все библиотеки и пути, где их искать?
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
08.10.2014, 21:14 6
kravam, grep есть в поставке MSYS для windows.
Т.к. mingw - это софт из мира unix, а идеология unix гласит, что "программа должна решать только одну задачу и делать это хорошо", то вариант с
Цитата Сообщение от ForEveR Посмотреть сообщение
nm --defined-only -g --demangle file_name.a | grep ima_obekta::ima_funktsii
является с этой точки зрения наиболее оптимальным. nm ищет имена, grep фильтрует. Если нужна автоматизация - пишем скрипт.

Лично я всегда именно так и ищу:
Bash
1
find <путь> -name "*.a" | xargs nm -A --defined-only -g --demangle | grep <имя>
Загнать это в скрипт совсем нетрудно.

Ни разу не слышал про графические средства. Хотя в составе IDE такой поиск возможно был бы полезен.
Тем лучше для тебя, в наше время сложно найти нишу, которая еще не занималась - реализуй сам .
За плагин к какому-нибудь Code::Blocks или Eclipse c подобной функциональностью тебе только спасибо скажут, на собеседованиях будешь ссылку давать на проект .
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
08.10.2014, 21:22  [ТС] 7
Ещё надо будет после нахождения каждого очередного нахождения *.a файла опять собирать экзешник. Ибо дни функции исчезают из числа неопознанных, появляются другие.
0
08.10.2014, 21:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2014, 21:22
Помогаю со студенческими работами здесь

Как узнать на какой строке заканчивается программа?
Всем здрастье, я начинающий так сказать программист и для практики решил написать мини-игру угадай...

Как узнать в какой строке в данный момент выполняется приложение
Visual Studio 2015, c#. Собрал решение, получил exe, пользуюсь им (запуская через проводник). В...

[WPF] Как узнать в какой строке DataGrid был клик по кнопке?
Есть DataGrid, в нем есть столбец с кнопкой : &lt;DataGridTemplateColumn Width=&quot;*&quot; Header=&quot;Действие&quot;...

Как узнать, какой процесс блокирует файл?
Перед открытием файла необходимо проверить его &quot;занятость&quot;. Если таковая имеется, то CreateFile...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru