maple + builder(delphi)
потому как никто ж не обязан тебе ) и ты прекрасно это должен понимать.
с удовольствием тебе помог если бы знал что такое Maple =)
поищи фишки Maple, мож есть какиой-то интерфейс для передачи данных... мож поддерживает OLE или еще что...
#include <stdlib.h>
/* OpenMaple routines are defined here */
#include "maplec.h"
/* Callback used for directing result output */
static void M_DECL textCallBack( void *data, int tag, char *output )
{
printf("%s\n", output);
}
int main( int argc, char *argv[] )
{
char err[2048];
/* Maple kernel vector - used to start and make calls to Maple. */
/* All OpenMaple function calls take kv as an argument. */
MKernelVector kv;
MCallBackVectorDesc cb = { textCallBack,
0, /* errorCallBack not used */
0, /* statusCallBack not used */
0, /* readLineCallBack not used */
0, /* redirectCallBack not used */
0, /* streamCallBack not used */
0, /* queryInterrupt not used */
0 /* callBackCallBack not used */
};
/* ALGEB is the C data type for representing Maple data structures */
ALGEB r, l;
/* Initialize Maple */
if( ( kv = StartMaple(argc, argv, &cb, NULL, NULL, err) ) == NULL ) {
printf( "Could not start Maple, %s\n", err );
return( 1 );
}
/* Compute the derivative of 1/(x^4+1) */
/* Output goes through the textCallBack() procedure */
printf( "Compute a derivative: \n\t" );
r = EvalMapleStatement( kv, "diff(1/(x^4+1), x);" );
/* Evaluate the derivative at x = 3 */
MapleAssign(kv,
ToMapleName( kv, "x", TRUE ),
ToMapleInteger( kv, 3 ));
r = MapleEval( kv, r );
MapleALGEB_Printf( kv, "\nThe derivative at x=3 is: %a\n", r );
return( 0 );
}
В Builder я создал cpp файл(File->New->Cpp file) и воткнул туда этот код за что получил:
[Linker Error] Unresolved external '_EvalMapleStatement' referenced from E:\...\UNIT1.OBJ
[Linker Error] Unresolved external '_ToMapleInteger' referenced from E:\...\UNIT1.OBJ
[Linker Error] Unresolved external '_ToMapleName' referenced from E:\...\UNIT1.OBJ
[Linker Error] Unresolved external '_MapleAssign' referenced from E:\...\UNIT1.OBJ
[Linker Error] Unresolved external '_MapleEval' referenced from E:\...\UNIT1.OBJ
[Linker Error] Unresolved external '_MapleALGEB_Printf' referenced from E:\...\UNIT1.OBJ
В общем, я взял учебник, где в главе "Ошибки компоновки" прочитал: эти ошибки обнаруживаются на этапе редактирования связей(компоновки) м/ду объектными файлами программы и библиотеками, которые она использует. Как правило, компоновщик выдает сообщение о том, что отсутствует некоторый глобальный символ или, наоборот, таких символов слишком много. Дублирование глобальных символов может иметь место, например, когда забывают объявить некоторую глобальную переменную как extern(внешнюю) или static(с обласьтю действия, ограниченной текущим файлом).
Когда же я, просто в проект Builder (File->New Application), вставляю этот код, то все работает(т.е. прога собирается,форма выскакивает...), но я естесственно не могу посмотреть результата(так как в коде это не описано)
Итак,
1. Есть ли данная ошибка "Linker Error Unresolved external..." ошибка компоновки?
2. Собственно, как быть?
вставляешь туда свой код и радуешься жызни
#include "maplec.h"
надо ещё project->add toproject maple.cpp (или maple.c) (Покрайней мере билдер без этого матерится как у тя.)
#include "maplec.h"
надо ещё project->add toproject maple.cpp (или maple.c) (Покрайней мере билдер без этого матерится как у тя.)
Все бы хорошо, но где же брать maple.cpp(*.c)?
в комплекте с maple данный файлик не идет, а гугл о таком даже не слышал
[Linker Error] Unresolved external '_EvalMapleStatement' referenced from
...
Итак,
1. Есть ли данная ошибка "Linker Error Unresolved external..." ошибка компоновки?
2. Собственно, как быть?
Нашел в папке с мейплом библиотеку maplec.lib, прицепил ее к проекту (Project->Add To Project), получил ошибку:
Использовал утилиту coff2omf.exe maplec.lib new.lib, прицепил new.lib к проекту, получил те же самые ошибки, что и без библиотеки new.lib:
[Linker Error] Unresolved external '_EvalMapleStatement' referenced from...
Следуя FAQ 16, при попытке сделать coff2omf.exe maplec.dll newmaplec.dll возникатет ошибка:
<coffread.cpp,1502>:invalid machine type detected
есть решение?
Нашел в папке с мейплом библиотеку maplec.lib, прицепил ее к проекту (Project->Add To Project), получил ошибку:
Использовал утилиту coff2omf.exe maplec.lib new.lib, прицепил new.lib к проекту, получил те же самые ошибки, что и без библиотеки new.lib:
[Linker Error] Unresolved external '_EvalMapleStatement' referenced from...
Следуя FAQ 16, при попытке сделать coff2omf.exe maplec.dll newmaplec.dll возникатет ошибка:
<coffread.cpp,1502>:invalid machine type detected
есть решение?
Есть конечно. во первых - читать внимательно то что писалось в факе. во вторых - хз, если вы считаете что каждый из программистов обязательно работал с maple и у него есть на чем проверить (или я кинусь искать сразу как эту проблему решить) - то я вас уверяю - это не так. поэтому или разбирайтесь сами или предоставляйте нормально информацию что бы вам могли помочь. Как уже сказано выше - никто никому здесь ничем не обязан - проверьте длл, в конце концов - загрузите ее динамически.
coff2omf.exe maplec.lib new.lib
где вы это в факе вычитали остается только догадываться.
последний вопрос про ошибки компилятора(Unresolved external) не связан только/конкретно с maple,тому доказательство FAQ под номером 16, автором которого вы являетесь, поэтому не понятна ваша ирония по этому поводу. FAQ прочтен внимательно и неоднократно.
вот этот товарищ писал тут
http://forum.codenet.ru/showthread.php?t=17940&page=2:
implib *.dll *.lib
Получаешь lib-файл для dll. (только сохрани предварительно где-нибудь копии dll и lib файлов)
Вариант №2:
omf2coff last.lib new.lib
Получишь lib-файл в нужном формате.
Только я не помню последовательность исходного/конечного файла в параметрах команд. В подсказке будет указан парядок следования параметров
так как у меня был необходимый lib-файл на который линкер ругался как на возможный coff, я решил что будет правильно применить конвертер coff2omf
http://forum.codenet.ru/showthread.php?t=17940&page=2:
так как у меня был необходимый lib-файл на который линкер ругался как на возможный coff, я решил что будет правильно применить конвертер coff2omf
Вы решили не верно - потому как coff2omf служит для конвертирования бинарных файлов из одного формата в другой. Чем отличаются данные форматы информацию я приводить не буду - ее легко найти в интернете. А lib-файл содержит по сути является архивной информацией о адресах экспортируемых функций в исходном файле(это упрощенно естественно). По этому применение к нему утилиты бессмыслено - это все равно как в базе данных рабочих завода поменять пол мастеру Ивану Ивановичу - и на этом основании поздравлять его с восьмым марта. :)
Ошибка, которую вы получаете может быть связана с несколькими причинами - во первых данная длл не предназначена для выполнения на этом процессоре - т.е. в заголовке РЕ-файла должен быть описан тип процессора, и в данном случае утилита не может его идентифицировать (если учесть что инструменты борланда уже изрядно устарели - ничего удивительного здесь нет).
Самое простое - попробуйте для начала сами считать заголовок РЕ-файла. Или используйте какой-либо удобный для вас инструмент - типа PEDUMP. Зачем это нужно? Если вам повезет можно попытаться решить данную проблему установкой подходящего типа процессора вручную. Не забудьте только обязательно сделать копию библиотеки.
Если совсем уж никак - то выложите длл, кто нибудь из участников если будет время посмотрит.
Второе - загрузите длл динамически и не мучайтесь.
у меня вeрсия билдера 5.0 Может 6 и выше поддерживают формат coff?
у меня вeрсия билдера 5.0 Может 6 и выше поддерживают формат coff?
Ты что чудо - с луны упало?
Или читать не умеешь? :D
Выше все написано - что тебе надо еще рассказать?