Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mkBX  
#1 Оставлено : 13 апреля 2014 г. 16:54:34(UTC)
mkBX

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.04.2014(UTC)
Сообщений: 2
Российская Федерация
Откуда: Калининград

Здравствуйте.
Подключила CPROCSP.framework к iOS проекту в соответствии с инструкцией ReadMe.txt. Далее добавила линковку с модулем поддержки считывателя, в соответствии с инструкцией Readers.txt. Я собираю приложение без поддержки считывателя смарт-карт. Добавляю библиотеку readers/librdrpcsc_empty.o соглавно п1 документа Readers.txt. При попытке собрать приложение получаю ошибку

Undefined symbols for architecture i386:
"_main", referenced from:
start in crt1.o
_RegisterApplicationChecksum in CPROCSP
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Скажите пожалуйста, в чем может быть причина такой ошибки и как ее исправить?
Offline Татьяна  
#2 Оставлено : 14 апреля 2014 г. 12:17:12(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Собираете приложение или библиотеку?
undefined символ main присутствует не в librdrpcsc_empty, а в основном бинарнике фреймворка, мы его используем для определения начала сегмента кода при контроле целостности. У вас в приложении, если это приложение, должна быть функция main, при линковке она должна "встретиться" с undefined символом и всё должно быть ок.
Если фукнция main есть, но почему-то всё не линкуется, можно там, где она объявлена и реализована у вас в вашем проекте, явно указать видимость:

int __attribute__((visibility("default"))) main(int argc, char *argv[])
Татьяна
ООО Крипто-Про
Offline mkBX  
#3 Оставлено : 14 апреля 2014 г. 13:01:29(UTC)
mkBX

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.04.2014(UTC)
Сообщений: 2
Российская Федерация
Откуда: Калининград

Собираю приложение (не библиотеку). CPROCSP.framework подключена к проекту в соответствии с инструкцией ReadMe.txt
Ошибка возникает только при подключении библиотеки librdrpcsc_empty.o в проект. Если я отключаю библиотеку librdrpcsc_empty.o
и вместо нее подключаю библиотеки для работы со смарт-картами Аладдин librdrjacarta.a и libAladdinReader.a, то приложение запускается без ошибок.
Указала в функции main своего проекта видимость int __attribute__((visibility("default"))) main(int argc, char *argv[]). Ошибка осталась.
Offline Татьяна  
#4 Оставлено : 14 апреля 2014 г. 13:07:31(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
довольно странно, потому что в описании ошибки явно написано, что undefined символ в CPROCSP:

Undefined symbols for architecture i386:
"_main", referenced from:
start in crt1.o
_RegisterApplicationChecksum in CPROCSP

и он действительно там.
И, если посмотреть на символы в librdrpcsc_empty, никакого _main там нет:
nm librdrpcsc_empty.o
000000c8 T _SCardBeginTransaction
00000190 T _SCardConnect
00000160 T _SCardDisconnect
00000040 T _SCardEndTransaction
00000000 T _SCardEstablishContext
000002b8 T _SCardGetAttrib
00000238 T _SCardGetStatusChange
00000278 T _SCardListReaders
000000f0 T _SCardReconnect
00000138 T _SCardReleaseContext
00000070 T _SCardStatus
000001e0 T _SCardTransmit
000002f8 S _g_rgSCardT0Pci
00000300 S _g_rgSCardT1Pci

пришлите мне проект посмотреть на kondakova at cryptopro.ru
Татьяна
ООО Крипто-Про
Offline NataliaT  
#5 Оставлено : 30 мая 2018 г. 13:37:06(UTC)
NataliaT

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2018(UTC)
Сообщений: 5
Российская Федерация
Откуда: Севастополь

Добрый день, подскажите, пожалуйста, столкнулась с такой же проблемой при подключении CPROCSP.framework к собственному фреймворку (не проекту). Все остальные ошибки были исправлены, осталась только эта.
Undefined symbols for architecture arm64:
"_main", referenced from:
_RegisterApplicationChecksum in CPROCSP
ld: symbol(s) not found for architecture arm64
Offline NataliaT  
#6 Оставлено : 1 июня 2018 г. 16:00:39(UTC)
NataliaT

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2018(UTC)
Сообщений: 5
Российская Федерация
Откуда: Севастополь

Автор: NataliaT Перейти к цитате
Добрый день, подскажите, пожалуйста, столкнулась с такой же проблемой при подключении CPROCSP.framework к собственному фреймворку (не проекту). Все остальные ошибки были исправлены, осталась только эта.
Undefined symbols for architecture arm64:
"_main", referenced from:
_RegisterApplicationChecksum in CPROCSP
ld: symbol(s) not found for architecture arm64


Очень жду ответа, добавлю, что поддержку считывателей не делаю.
Offline Dmitry_Bokovikov  
#7 Оставлено : 5 июня 2018 г. 11:50:50(UTC)
Dmitry_Bokovikov

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 29.01.2014(UTC)
Сообщений: 172
Откуда: Москва

Поблагодарили: 18 раз в 17 постах
Добрый день!

Попробуйте добавить объявление
extern "C" int main(int argc, char **argv);
Offline NataliaT  
#8 Оставлено : 5 июня 2018 г. 12:23:07(UTC)
NataliaT

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2018(UTC)
Сообщений: 5
Российская Федерация
Откуда: Севастополь

Для свифтового фреймворка ошибку получилось исправить добавлением обычного main.mm файла, как для objc проекта с функцией
int main(int argc, char *argv[]) {
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, nil);
return retVal;
}
}

Отредактировано пользователем 8 июня 2018 г. 16:12:15(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.