powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Непонятное поведение компилятора C. Не линкуются ресурсы.
10 сообщений из 10, страница 1 из 1
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36985723
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Вкратце история такова. Есть такой язык программирования R - консольный опен-сорс, очень удобный для статистической обработки данных (может кто знает, вот ссылка откуда можно скачать, все полностью бесплатно The Comprehensive R Archive Network ). Иногда одного R недостаточно и для него есть возможность использовать свои dll, написанные на С (можно даже на С++, но это сложнее). При установке R к нему идут куча заголовочных файлов .h, которые позволяют использовать объекты из R внутри С (т.к. в R базовый объект вектор).
Читаю мануал по расширениям R (R-exts.pdf, входит в установку). там есть такой пример.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <R.h>
#include <Rdefines.h>
SEXP convolve2(SEXP a, SEXP b)
{
int i, j, na, nb, nab;
double *xa, *xb, *xab;
SEXP ab;
PROTECT(a = AS_NUMERIC(a));
PROTECT(b = AS_NUMERIC(b));
na = LENGTH(a); nb = LENGTH(b); nab = na + nb -  1 ;
PROTECT(ab = NEW_NUMERIC(nab));
xa = NUMERIC_POINTER(a); xb = NUMERIC_POINTER(b);
xab = NUMERIC_POINTER(ab);
for(i =  0 ; i < nab; i++) xab[i] =  0 . 0 ;
for(i =  0 ; i < na; i++)
for(j =  0 ; j < nb; j++) xab[i + j] += xa[i] * xb[j];
UNPROTECT( 3 );
return(ab);
}

Пытаюсь его откомпилировать в dll - получаю следующее (пример из Code::Blocks):
||=== mcb2, Release ===|
obj\Release\conv.o:conv.c|| undefined reference to `Rf_coerceVector'|
......
obj\Release\conv.o:conv.c|| undefined reference to `Rf_unprotect'|
||=== Build finished: 12 errors, 0 warnings ===|

Тот же самый код, построение в VS 2008
------ Построение начато: проект: bbbb, Конфигурация: Debug Win32 ------
Компоновка...
mycomb2.obj : error LNK2019: ссылка на неразрешенный внешний символ _Rf_unprotect в функции _Cnk
....
mycomb2.obj : error LNK2019: ссылка на неразрешенный внешний символ _INTEGER в функции _Cnk
E:\My\My Super programm\Projects\bbbb\Debug\bbbb.dll : fatal error LNK1120: 5 неразрешенных внешних элементов
Журнал построения был сохранен в "file://e:\My\My Super programm\Projects\bbbb\Debug\BuildLog.htm"
bbbb - ошибок 6, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Dev++ показывает что это
[Linker error] undefined reference to `Rf_coerceVector'
...
....

В общем, что-то не то с линкером ... При этом обычные С программы компилируются на ура...
Все пути везде прописаны, даже скопировал эти заголовочные файлы в директории \include компиляторов - без толку. Перечитал кучу других статей на эту тему - везде у всех все нормально работает в вышеуказанном виде.

В чем может быть причина, может кто знает или сталкивался с подобным, буду очень благодарен за помощь.
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36985768
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич Александр,

Нужно добавить компилятору нужную (и под этот компилятор) .lib
Можно поискать в файлах по тексту Rf_unprotect итд
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36985777
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поподробнее? Я в этом не очень силен, если честно. Каков порядок действий по добавлению .lib и где этот .lib взять?
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36985781
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич Александр,

Смотри что входит в binaries от R.
Или должна быть готовая, или придется собирать самому.

Нормальной инструкции на сайте не замечаю (
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36987281
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инструкция не на сайте...
Она входит в пакет инсталляции. Т.е. скачиваешь бинарник R, устанавливаешь, потом запускаешь GUI, потом из меню help -> Manuals (in pdf) -> Writing R extentions.
Но там ничего нет о том, что надо самому что-то собирать, вроде уже как все собрано, только использовать...
Если там есть готовая, как должна выглядеть (называться)?

Главное, нигде ничего не указано такого, все должно работать "из коробки" :(.
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36987576
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK, вот что еще нашел в мануалах.

You need a means of compiling C. Some add-on packages also need a C++ compiler. Your C compiler should be IEC 600591, POSIX 1003.1 and C99-compliant. R tries to choose suitable flags for the C compilers it knows about, but you may have to set CC or CFLAGS suitably. For recent versions of gcc
with glibc this means including ‘-std=gnu99’2. If the compiler is detected as gcc, ‘-std=gnu99’
will be appended to CC unless it conflicts with a setting of CFLAGS. (Note that options essential
to run the compiler even for linking, such as those to set the architecture, should be specified as
part of CC rather than of CFLAGS.)

Вопрос - где выставлять эти флаги?
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36987637
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич АлександрИнструкция не на сайте...
Она входит в пакет инсталляции. Т.е. скачиваешь бинарник R, устанавливаешь, потом запускаешь GUI, потом из меню help -> Manuals (in pdf) -> Writing R extentions. Ну и зачем обманывать?
// http://cran.r-project.org/doc/manuals/R-exts.html

Диклевич АлександрВопрос - где выставлять эти флаги?
// http://cran.r-project.org/doc/manuals/R-exts.html#Using-Makevars
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36988385
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, спасибо, теперь бы со всем этим разобраться...
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36992348
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, разобрался, что надо линкеру
Вот это
Но теперь подскажите, откуда запускать эти команды?
Код: plaintext
1.
make R.exp
lib /def:R.exp /out:Rdll.lib

Я в этом немного чайник, так что не обессудьте!
...
Рейтинг: 0 / 0
Непонятное поведение компилятора C. Не линкуются ресурсы.
    #36993803
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгожданный хэппи-энд!

Дело было во многих факторах, но вот несколько основных (если кому интересно):

1) R и RTools необходимо устанавливать в директории, не содержащие в названиях пробелы.
2) MVSC Compiler не очень подходит для компиляции таких dll для R, вместо него рекомендуют использовать GNU GCC Compiler; впрочем можно и MVSC Compiler заставить собирать такие dll, но я так и не понял как.
3) Я пользую Code::Blocks IDE и там в дополнительных установках линкера надо прописать "-LC:/Rtools/R/bin/i386 -lR"

И все замечательно работает!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Непонятное поведение компилятора C. Не линкуются ресурсы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]