Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.009 c
14-46120
^Sanya
2002-10-27 00:03
2002.11.14
Существует ли обратная совместимость Delphi7->Delphi6 ?


3-45735
ilya1974
2002-10-22 16:48
2002.11.14
Представление данных


1-45943
Krasuk
2002-11-04 11:51
2002.11.14
StringGrid


1-45930
DenK_vrtz
2002-11-01 15:43
2002.11.14
Как определить класс?


1-45961
Zuvom
2002-11-04 13:31
2002.11.14
Удаление файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский