Форум: "Потрепаться";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
ВнизВопрос по Си... Только ногами не бейте, ладно? :) Найти похожие ветки
← →
Sapersky_ (2002-10-26 00:18) [0]Нужно скомпилировать одну старую сийскую программу. Компилироваться она компилируется, но при линковке выдаёт "Unresolved external _<function> from module <который компилирую>", где _<function> - имя внешней функции, для которой исходников нет (только lib или obj), именно с предшествующим "_". Иногда, видимо, для разнообразия :), не находит "_main" в одном из подключаемых модулей.
Насколько я узнал из хелпа, знак подчёркивания как раз нужен для линковки и добавляется он автоматически в соответствии с опцией компилятора. Однако не работает. Пробовал отключать эту опцию - безрезультатно.
← →
Suntechnic (2002-10-26 00:57) [1]Так у тебя lib есть или obj? Это большая разница. В lib нет никакой ф-ции, а только есть указание где брать эту ф-цию. А в obj как раз и находится сама ф-ция.
Скорее всего в опциях линковщика тебе необходимо указать этот lib или obj, но ты ведь даже не сказал чем линкуешь. Так что дальше что-либо советовать трудно.
← →
Sapersky_ (2002-10-26 01:57) [2]>> В lib нет никакой ф-ции, а только есть указание где брать эту ф-цию
Да ну? А мне сказали, что lib - это несколько obj-ей, упакованных в одну кучу. И, кстати, я даже пробовал их оттуда извлекать (утилитой tlib.exe). И даже получалось :). Или он реально просто находит нужный obj...
Указать в опциях линковщика - прописать в search dir? Так это делается.
А чем линкую - да всем понемножку... C-Builder"ом, например, или родным для этой программы Turbo-C 2.0 (помните такое? :)). Ошибка выдаётся по смыслу одна и та же.
Что использую (lib или obj)... вот как раз хотел спросить, как это узнать :). Т.е. аналог паскалевского uses. include? Но оно же вроде только заголовки включает, а как подключается код? В заголовке должно быть указано, или код - файл с тем же именем? Есть прецедент - screen.h и screen.lib, но у остальных не совпадают.
Вообще, в комплекте с программой идёт определённое количество и obj, и lib (тот же screen); ну и заголовки, естественно. Используется и кое-что стандартное - например, coc.obj (или cox32.obj в варианте C-Builder"а). Кстати, что это? :)
← →
Suntechnic (2002-10-26 03:36) [3]>Sapersky_ (26.10.02 01:57)
Да ну? А мне сказали, что lib - это несколько obj-ей, упакованных в одну кучу.
Фигню тебе сказали. obj-и упакованные в одну кучу это есть как раз dll. Теоретически есть возможность создавать lib в которых будет всё и компоновать с ними программу, но я такой фигнёй не страдал и думаю мало кто этим занимается. Обычно когда ведут речь о lib подразумевают библиотеку импорта. БИ это библиотека которая создаётся одновременно с dll и в ней содержится только ссылка на ф-цию в dll, но не сама ф-ция. Да ты сам можешь проверить сравнив размер lib файла и соответствуюшей ему dll.
Что использую (lib или obj)... вот как раз хотел спросить, как это узнать :).
Ну здрасьте. Ты ж вызываешь какую то ф-цию, вот и расскажи где ты её берёшь.
Т.е. аналог паскалевского uses. include
Нет это не аналог. uses and include это дерективы компилятору, а мы ведём оечь о линковщике.
Есть прецедент - screen.h и screen.lib, но у остальных не совпадают.
Вот это уже ближе к телу. Именно так и должно быть. Есть определение ф-ции в виде заголовочного файла(*.h), и есть информация где эту ф-цию брать (*.lib). А несовподение может быть по той простой причине что один *.lib может включать информацию о нескольких заголовочных файлах. Проще всего выяснить какой именно можно путём обычного поиска имени ф-ции в файлах lib или obj.
В любом случае твоя проблема решается следующим образом. В C++ Builder пишешь директиву линковщику:
#pragma link "modulename.lib"
или
#pragma link "modulename.obj"
Для Turbo C понятия не имею. Почитай про директивы линковщику или смотри в опциях линковщика.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c