|
|
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Вкратце история такова. Есть такой язык программирования 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. Пытаюсь его откомпилировать в 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 компиляторов - без толку. Перечитал кучу других статей на эту тему - везде у всех все нормально работает в вышеуказанном виде. В чем может быть причина, может кто знает или сталкивался с подобным, буду очень благодарен за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 12:40 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Диклевич Александр, Нужно добавить компилятору нужную (и под этот компилятор) .lib Можно поискать в файлах по тексту Rf_unprotect итд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 12:53 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
А можно поподробнее? Я в этом не очень силен, если честно. Каков порядок действий по добавлению .lib и где этот .lib взять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 12:55 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Диклевич Александр, Смотри что входит в binaries от R. Или должна быть готовая, или придется собирать самому. Нормальной инструкции на сайте не замечаю ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 12:57 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Инструкция не на сайте... Она входит в пакет инсталляции. Т.е. скачиваешь бинарник R, устанавливаешь, потом запускаешь GUI, потом из меню help -> Manuals (in pdf) -> Writing R extentions. Но там ничего нет о том, что надо самому что-то собирать, вроде уже как все собрано, только использовать... Если там есть готовая, как должна выглядеть (называться)? Главное, нигде ничего не указано такого, все должно работать "из коробки" :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 20:46 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
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.) Вопрос - где выставлять эти флаги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 00:42 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Диклевич АлександрИнструкция не на сайте... Она входит в пакет инсталляции. Т.е. скачиваешь бинарник 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 02:04 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
ОК, спасибо, теперь бы со всем этим разобраться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 12:36 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Хорошо, разобрался, что надо линкеру Вот это Но теперь подскажите, откуда запускать эти команды? Код: plaintext 1. Я в этом немного чайник, так что не обессудьте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2010, 00:45 |
|
||
|
Непонятное поведение компилятора C. Не линкуются ресурсы.
|
|||
|---|---|---|---|
|
#18+
Долгожданный хэппи-энд! Дело было во многих факторах, но вот несколько основных (если кому интересно): 1) R и RTools необходимо устанавливать в директории, не содержащие в названиях пробелы. 2) MVSC Compiler не очень подходит для компиляции таких dll для R, вместо него рекомендуют использовать GNU GCC Compiler; впрочем можно и MVSC Compiler заставить собирать такие dll, но я так и не понял как. 3) Я пользую Code::Blocks IDE и там в дополнительных установках линкера надо прописать "-LC:/Rtools/R/bin/i386 -lR" И все замечательно работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2010, 15:52 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36985723&tid=1343284]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 427ms |

| 0 / 0 |
