Главная страница
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.02 c
14-46146
ev
2002-10-24 20:18
2002.11.14
vcl и clx


14-46060
[NIKEL]
2002-10-24 19:00
2002.11.14
У кого какие книги (компьютерные) стоят на полке рядом с компом?


6-46037
kot2
2002-09-19 11:36
2002.11.14
Траблы с TClientSocket внутри DLL


1-45903
vanek
2002-11-06 08:36
2002.11.14
Кто-нибудь знает как сделать *.html документ?


3-45742
Дуся
2002-10-24 16:26
2002.11.14
TADOStoredProc + deadlock