Если вы используете систему сборки (CMake, SCons, ...), вполне возможно, что система сборки также генерирует некоторые файлы, и один из них может содержать метод main()
. Мы используем эту методологию, когда генерируем основную функцию, чтобы создавать экземпляры классов для библиотек, которые были специально выбраны в CMake-gui.
И опять же, возможно, что система сборки удаляет сгенерированные файлы из-за какой-то неясной политики, о которой подумали первоначальные разработчики, но не сказали вам. Так что поищите системные файлы сборки, посмотрите, что там происходит на самом деле.
Изменить
Итак, увидев вы CMakeLists.txt:
проверьте ${DIR_EXT}/covis/src/ci.cpp
, где DIR_EXT
равно SET( DIR_EXT "../ext/" CACHE PATH "Folder holding external libraries" )
Посмотрите, что там внутри, и дайте нам знать :)
Изменить2
Увидев build.sh
(выполните шаги по порядку):
1. изменить
`cmake -D COMPILE_BINARY=ON ..`
to
`cmake -D COMPILE_BINARY=ON -DCMAKE_BUILD_TYPE=Debug ..`
и добавьте тот же -DCMAKE_BUILD_TYPE=Debug
к другой команде cmake
.
Это создаст вашу библиотеку и исполняемый файл в режиме отладки.
2. Теперь в одном из исходных файлов C++, к которому у вас есть доступ и вы уверены, что он будет вызван (чем раньше будет вызвана функция, тем лучше), добавьте:
asm("int $0x03");
Это создаст точку останова в вашем приложении.
(Если вы не хотите использовать это, см. ниже).
3. Создайте свое приложение.
4. Запустите его через отладчик в терминале:
gdb ./myapplication <ENTER>
(это даст вам подсказку gdb)
(если вы не добавили точку останова asm
сверху, введите в приглашении gdb: break filename.cpp:linenumber
или break methodname
, чтобы добавить точку останова gdb).
run <ENTER>
Теперь ваше приложение должно останавливаться в вашей функции, когда оно выполняется. Вы все еще находитесь в командной строке gdb, поэтому введите:
bt <ENTER>
Это распечатает обратную трассировку вашего приложения. Где-то вы должны увидеть основную функцию вместе с именем файла и номером строки.
Тем не менее, этот setnames.sh
выглядит интересно, посмотрите, не делает ли он ничего смешного :)
person
Ferenc Deak
schedule
01.04.2014
main
. Можно немного расширить поиск. Попробуйтеgrep -RIi main *
или что-то подобное в главном каталоге проекта. - person Kiril Kirov   schedule 31.03.2014nm
в общих библиотеках и посмотреть, есть ли в них файл main. Кроме того, может быть, в заголовке есть макрос, который расширяется доmain
? Вы тоже искалиmain
в заголовках? - person Shahbaz   schedule 31.03.2014makefile
,main
может быть в каком-то другом месте (не уверен, что это возможно, но я не вижу причин не быть). Для динамических библиотек может быть полезноldd executable
(перечисляет все динамические библиотеки, используемые исполняемым файлом). - person Kiril Kirov   schedule 31.03.2014