Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Вопрос по Си... Только ногами не бейте, ладно? :)   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-45710
Hawk2
2002-10-24 10:24
2002.11.14
Хранимые процедуры.


7-46168
Ш-К
2002-09-13 14:51
2002.11.14
Кто-нибудь работал с ПУ по протоколу ЕРР?


14-46117
Шишкин Илья
2002-10-27 13:36
2002.11.14
3DMax!!!


1-45839
liho26
2002-11-04 08:27
2002.11.14
D7, что за глюк?


3-45783
ShooRoop
2002-10-18 14:46
2002.11.14
Максимальное кол-во полей в таблице СКЛсервера 7.0?