Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
1

Unresolved External в простом консольном проекте

09.04.2012, 12:36. Показов 2051. Ответов 16
Метки нет (Все метки)

Здравствуйте. Решил написать простой консольный проект в RAD Studio 2010 (С++ Builder).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <stdio.h>
#include <tiffio.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
 
int main(int argc, char *argv[]){
  // Define an image
  char buffer[25 * 144] = { 0 };
  TIFF *image;
 
  // Open the TIFF file
  if((image = TIFFOpen("output.tif", "w")) == NULL){
    printf("Could not open output.tif for writing\n");
    exit(42);
  }
 
  // We need to set some values for basic tags before we can
  TIFFSetField(image, TIFFTAG_IMAGEWIDTH, 25 * 8);
  TIFFSetField(image, TIFFTAG_IMAGELENGTH, 144);
  TIFFSetField(image, TIFFTAG_BITSPERSAMPLE, 1);
  TIFFSetField(image, TIFFTAG_SAMPLESPERPIXEL, 1);
  TIFFSetField(image, TIFFTAG_ROWSPERSTRIP, 144);
 
  TIFFSetField(image, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX4);
  TIFFSetField(image, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
  TIFFSetField(image, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB);
  TIFFSetField(image, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
 
  TIFFSetField(image, TIFFTAG_XRESOLUTION, 150.0);
  TIFFSetField(image, TIFFTAG_YRESOLUTION, 150.0);
  TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
 
  // Write the information to the file
  TIFFWriteEncodedStrip(image, 0, buffer, 25 * 144);
 
  // Close the file
  TIFFClose(image);
}
 
//---------------------------------------------------------------------------

Как видно из кода, используется библиотека libtiff. Пути к папкам include и lib указаны в C++ Options=>Paths and Directories. При компиляции выдает ошибки:

C++
1
2
3
4
5
6
7
8
9
Checking project dependencies...
Compiling TIFF_1_progect.cbproj (Debug configuration)
[ILINK32 Error] Error: Unresolved external '_TIFFOpen' referenced from C:\USERS\ILYA\DOCUMENTS\RAD STUDIO\PROJECTS\TIFF_EXAMPLES\DEBUG\TIFFIO.OBJ
[ILINK32 Error] Error: Unresolved external '_TIFFSetField' referenced from C:\USERS\ILYA\DOCUMENTS\RAD STUDIO\PROJECTS\TIFF_EXAMPLES\DEBUG\TIFFIO.OBJ
[ILINK32 Error] Error: Unresolved external '_TIFFWriteEncodedStrip' referenced from C:\USERS\ILYA\DOCUMENTS\RAD STUDIO\PROJECTS\TIFF_EXAMPLES\DEBUG\TIFFIO.OBJ
[ILINK32 Error] Error: Unresolved external '_TIFFClose' referenced from C:\USERS\ILYA\DOCUMENTS\RAD STUDIO\PROJECTS\TIFF_EXAMPLES\DEBUG\TIFFIO.OBJ
[ILINK32 Error] Error: Unable to perform link
Failed
Elapsed time: 00:00:00.6

Все используемые функции объявлены в tiffio.h, который билдер точно видит, т.к. не ругается на строчку
C++
1
TIFF *image;
Вот эти функции в tiffio.h:

C++
1
2
3
4
5
6
7
8
9
...
LIBTIFF_DLL_IMPEXP  TIFF* TIFFOpen(const char*, const char*);
...
LIBTIFF_DLL_IMPEXP  int TIFFSetField(TIFF*, ttag_t, ...);
...
LIBTIFF_DLL_IMPEXP  tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
...
LIBTIFF_DLL_IMPEXP  void TIFFClose(TIFF*);
...

Прошу указать на мою ошибку.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2012, 12:36
Ответы с готовыми решениями:

Непонятные ошибки - unresolved token, unresolved external
Здравствуйте, у меня Visual Studio 2010, и при выполнении кода #include &quot;stdafx.h&quot; #include...

Unresolved external symbol, unresolved token
Всем привет. У меня тут такое дело: // learncpp.cpp : main project file. #include &quot;stdafx.h&quot;...

error LNK2001: unresolved external symbol---fatal error LNK1120: 4 unresolved externals
Здравствуйте! Занимаюсь программированием не очень долго, прошу объяснить в доступных терминах для...

Странный баг в простом консольном приложении С++
Написал код, все работает как надо вот только оно предлагает вводить названия &quot;призов&quot; со второго,...

16
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 12:59 2
консоль без поддержки VCL?

Добавлено через 47 секунд
.. по заголовку вроде "с поддержкой", но при создании может галочка не поставлена была. хотя я не знаю как это там в хе
0
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 13:43  [ТС] 3
Галочка была поставлена напротив Console App, или что-то вроде того. vcl.h стоял изначально.

Добавлено через 6 минут
Есть ответ на подобный вопрос - сама функция в файле .h не объявлена, или не используется в исходном коде, но в моем случае все объявлено в tiffio.h, вот и не могу разобраться, в чем причина.
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 13:49 4
может что то вроде Add to project/Lib

Добавлено через 38 секунд
...или #define IMPORT или extern "C"... почему же он пишет _имя...

Добавлено через 44 секунды
..или может файл C...
0
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 14:15  [ТС] 5
Цитата Сообщение от vxg Посмотреть сообщение
может что то вроде Add to project/Lib

Добавлено через 38 секунд
...или #define IMPORT или extern "C"... почему же он пишет _имя...

Добавлено через 44 секунды
..или может файл C...
Не понял. Надо добавить указанные вами строки в начало исходного кода?
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 15:04 6
я в том смысле - компилер говорит непонятные внешние функции. значит они не подключены. может быть лежат в либе которую нужно подцепить к проекту что бы он мог быть приленкован к длл.
0
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 15:05  [ТС] 7
Но я указал в Options путь к дополнительным библиотекам. И в свойствах проекта эти пути тоже есть.
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 15:10 8
... по поводу дефайна и экстерна - вряд ли это ваш случай. если бы вы линковались с чьей-то самодельной длл она могла потребовать специфических дефайнов перед включением заголовка. при линковке с длл на си мог потребоваться экстерн что бы имена длл начали восприниматься без префиксов _. при межязыковой линковке тоже могли быть танцы с экстерн

Добавлено через 49 секунд
либтифф точно лежит в папке либ? попробуйте на всякий случай явно добавить ее в проект

Добавлено через 1 минуту
у меня к примеру компилер не хотел находит либу в подпапке PSDK - пришлось руками включать
1
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 15:40  [ТС] 9
Я поступил следующим образом: зашел на официальный сайт этой библиотеки, скачал exe-инсталятор. установил в Program Files. Все, на этом инструкции создателей закончились. В настройках среды добавил пути к библиотеке и к инклюдам. Может, неправильно установил, хотя других способов установки особо-то и нет.
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 15:56 10
это длл? попробуйте явно добавить в проект ее lib файл
0
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 16:05  [ТС] 11
Заметил, что в установленной библиотеке имеется файл libtiff.dll.a. Странно. Может стоит подправить расширение.
Расширение нельзя изменить. Расширение ".a" имеют статические библиотеки для Linux. Т.е., archive. Как оно попало в установщик для Windows - загадка. Я так понимаю, с такими библиотеками Билдер не работает.
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 16:14 12
как и обещал проблема вылечилась явным добавлением libtiff-bcc.lib в проект

Добавлено через 30 секунд
.a - это не для Борланда

Добавлено через 1 минуту
попало оно так - это для gcc, например, для Dev-Cpp
1
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 16:17  [ТС] 13
Цитата Сообщение от vxg Посмотреть сообщение
это длл? попробуйте явно добавить в проект ее lib файл
Добавлять надо в Project=> Options=>Directories and Conditionals=>BPI/LIB output, да?

Добавлено через 1 минуту
попало оно так - это для gcc, например, для Dev-Cpp[/QUOTE]
Ну, это понятно, я просто сначала не обратил внимания. недоработка разрабов.
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 16:17 14
я добавил через Project/Add to project
1
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 16:18  [ТС] 15
Попробую, спасибо.
0
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
09.04.2012, 16:18 16
Цитата Сообщение от S_hmel Посмотреть сообщение
Ну, это понятно, я просто сначала не обратил внимания. недоработка разрабов.
думаю они просто выдают один и тот же архив файлов для всех платформ, просто инсталлер скомпилен для виндовс
1
3 / 3 / 1
Регистрация: 14.02.2012
Сообщений: 82
09.04.2012, 17:29  [ТС] 17
vxg, вот спасибо, помогли! Надо было внимательней книгу читать!!!!

Добавлено через 1 час 9 минут
Да, еще для работы программы нужны библиотеки jpeg62.dll, libtiff3.dll и zlin1.dll. Я их скопировал прямо в папку с проектом. Билдер о них ничего не говорит, но вот в мануале о libtiff о них сказано.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2012, 17:29

Unresolved external
Доброго времени суток. Такая вот байда получается...Суть вот в чем: По заданию преподавателя...

unresolved external
Имеется сольюшн из 3х файлов: List.h: #include &quot;stdafx.h&quot; #ifndef _LIST_H_ #define _LIST_H_...

Unresolved external
Builder 2010 Error: Unresolved external '__fastcall...

Unresolved external
Проблема следующая: класс &quot;die&quot; хранится отдельным файлом. .h: #ifndef butsH #define butsH...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.