OberonCore https://forum.oberoncore.ru/ |
|
Code file for ... not found https://forum.oberoncore.ru/viewtopic.php?f=1&t=2647 |
Страница 1 из 1 |
Автор: | Роман М. [ Понедельник, 17 Май, 2010 14:43 ] |
Заголовок сообщения: | Code file for ... not found |
Поясните мне как понимать сообщение Цитата: command error: code file for libgobject-2.0-0 not found Зачем он ему вообще нужен? Ведь используются лишь символы dll-библиотеки. Причём, исполняемый файл работает исправно. BlackBox версии 1.6RC5. Вот на таком простом примере: Код: MODULE GnomeHello; IMPORT SYSTEM, WinApi, lg := GnomeGlib, lo := GnomeGObject, gdk := GnomeGdk, ls := GnomeGObjectStuff, gtk := GnomeGtk; PROCEDURE MessageBox (title, msg: ARRAY OF CHAR; buttons: SET): INTEGER; BEGIN RETURN WinApi.MessageBoxW(0, msg, title, buttons) END MessageBox; PROCEDURE [ccall] delete_event ( widget: gtk.PGtkWidget; event: gdk.PGdkEvent; user_data: lg.gpointer ); BEGIN IF MessageBox('delete_event', "DELETE_EVENT", {}) = 0 THEN END; END delete_event; PROCEDURE [ccall] hello ( widget: gtk.PGtkWidget; data: lg.gpointer ); BEGIN IF MessageBox('Hello World', "HELLO WORLD", {}) = 0 THEN END; END hello; PROCEDURE [ccall] destroy ( widget: gtk.PGtkWidget; data: lg.gpointer ); BEGIN gtk.gtk_main_quit(); END destroy; PROCEDURE Q*(); BEGIN IF MessageBox('q', "Q", {}) = 0 THEN END; END Q; PROCEDURE HelloWorld* (); VAR (* GtkWidget is the storage type for widgets *) window: gtk.PGtkWidget; button: gtk.PGtkWidget; argc: gtk.PInt; argv: gtk.PStrList; BEGIN (* This is called in all GTK applications. Arguments are parsed * from the command line and are returned to the application. *) (*gdk.gdk_init(SYSTEM.ADR(Kernel.bootInfo.argc), SYSTEM.ADR(Kernel.bootInfo.argv));*) (*gtk.gtk_init(SYSTEM.ADR(Kernel.bootInfo.argc), SYSTEM.ADR(Kernel.bootInfo.argv));*) gtk.gtk_init(argc, argv); (* create a new window *) window := gtk.gtk_window_new(gtk.GTK_WINDOW_TOPLEVEL); (* When the window is given the "delete-event" signal (this is given * by the window manager, usually by the "close" option, or on the * titlebar), we ask it to call the delete_event () function * as defined above. The data passed to the callback * function is NULL and is ignored in the callback function.*) ls.g_signal_connect(window, "delete-event", SYSTEM.ADR(delete_event), NIL); (* /* Here we connect the "destroy" event to a signal handler. * This event occurs when we call gtk_widget_destroy() on the window, * or if we return FALSE in the "delete_event" callback. *) ls.g_signal_connect(window, "destroy", SYSTEM.ADR(destroy), NIL); (* Sets the border width of the window. *) gtk.gtk_container_set_border_width(window(gtk.PGtkContainer), 10); (* Creates a new button with the label "Hello World". *) button := gtk.gtk_button_new_with_label("Hello World"); (* When the button receives the "clicked" signal, it will call the * function hello() passing it NULL as its argument. The hello() * function is defined above. *) ls.g_signal_connect(button, "clicked", SYSTEM.ADR(hello), NIL); (* This will cause the window to be destroyed by calling * gtk_widget_destroy(window) when "clicked". Again, the destroy * signal could come from here, or the window manager. *) ls.g_signal_connect_swapped(button, "clicked", SYSTEM.ADR(gtk.gtk_widget_destroy), SYSTEM.VAL(lg.gpointer, window)); (* This packs the button into the window (a gtk container). *) gtk.gtk_container_add(window(gtk.PGtkContainer), button); (* The final step is to display this newly created widget. *) gtk.gtk_widget_show(button); (* and the window *) gtk.gtk_widget_show(window); (* All GTK applications must have a gtk_main(). Control ends here * and waits for an event to occur (like a key press or * mouse event). *) gtk.gtk_main(); END HelloWorld; END GnomeHello. GnomeHello.HelloWorld |
Автор: | Евгений Темиргалеев [ Понедельник, 17 Май, 2010 14:48 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Роман М. писал(а): Поясните мне как понимать сообщение здесь "code file" = "dll"-библиотека
Цитата: command error: code file for libgobject-2.0-0 not found |
Автор: | Роман М. [ Понедельник, 17 Май, 2010 14:50 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Но ведь файл (libgobject-2.0-0.dll) существует! Он находится в корневой папке ББ, как и остальные DLL. Значит, ББ не там ищет. |
Автор: | Роман М. [ Вторник, 18 Май, 2010 18:19 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Предлагаю вашему вниманию такую особенность (или ошибку). 1. Создайте модуль Код: MODULE TestLibDll; IMPORT WinApi; PROCEDURE MsgBox*(title, msg: ARRAY OF CHAR; buttons: SET); BEGIN IF WinApi.MessageBoxW(0, title, msg, buttons) = 0 THEN END; END MsgBox; END TestLibDll. Скомпилируйте его. Скомпонуйте его в библиотеку libtest.dll: ![]() 2. Переименуйте libtest.dll в libtest-win32-1.0-0.dll 3. Создайте модуль Код: MODULE TestLibDllInt ["libtest-win32-1.0-0"]; Скомпилируйте его.IMPORT WinApi; PROCEDURE MsgBox*(title, msg: ARRAY OF CHAR; buttons: SET); END TestLibDllInt. 4. Создайте модуль Код: MODULE TestLibLoad; Скомпилируйте его.IMPORT t := TestLibDllInt; PROCEDURE Run*; VAR BEGIN t.MsgBox('q', "Q", {}) END Run; END TestLibLoad. 5. И наконец, запустите ![]() Получим ошибку Цитата: command error: code file for libtest-win32-1.0-0 not found Отсюда следует вывод, что для командера имя библиотеки libtest-win32-1.0-0.dll не является допустимым. Догадка: связано с дополнительной точкой в имени файла. |
Автор: | maliya [ Вторник, 18 Май, 2010 21:48 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Try this: ! DevLinker.LinkDll libtest.dll := TestLibDll # ~ you may lost # |
Автор: | Роман М. [ Вторник, 18 Май, 2010 22:01 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Насчёт '#' верно замечено. Я и вправду упустил. Только это всё равно не решило проблемы. Зато EXE исполняется без каких-либо проблем. |
Автор: | maliya [ Среда, 19 Май, 2010 12:22 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Роман М. писал(а): Насчёт '#' верно замечено. Я и вправду упустил. Только это всё равно не решило проблемы. Зато EXE исполняется без каких-либо проблем. do you unload old dll(no export procedure which has been loaded in system)? I have checked, no problem. |
Автор: | Роман М. [ Среда, 19 Май, 2010 13:27 ] |
Заголовок сообщения: | Re: Code file for ... not found |
maliya писал(а): do you unload old dll(no export procedure which has been loaded in system)? Я заново скомпилировал эскпортируемый (export) интерфейс модуля TestLibDll, скомпоновал (linked) в файл libtest.dll, переименовал в "libtest-win32-1.0-0.dll" (проблема именно в файле с таким именем). Затем перезапустил BlackBox и получил ту же ошибку при запуске TestLibLoad.Run.I have checked, no problem. Зато с именем файла libtest.dll таких проблем не замечено. Люди, проверьте, сможет ли кто из вас воспроизвести мою ошибку. |
Автор: | maliya [ Среда, 19 Май, 2010 13:44 ] | ||
Заголовок сообщения: | Re: Code file for ... not found | ||
In my system use your example
|
Автор: | Роман М. [ Среда, 19 Май, 2010 14:16 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Я давал библиотеке имя libtest-win32-1.0-0.dll (с точкой после "1"), а не libtest-win32-1-0-0.dll . Или ты предлагаешь мне изменять стандартные имена библиотек из-за этой ошибки, как решение ситуации? |
Автор: | maliya [ Среда, 19 Май, 2010 14:33 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Роман М. писал(а): Я давал библиотеке имя libtest-win32-1.0-0.dll (с точкой после "1"), а не libtest-win32-1-0-0.dll . Или ты предлагаешь мне изменять стандартные имена библиотек из-за этой ошибки, как решение ситуации? MSDN: HINSTANCE LoadLibrary( LPCTSTR lpLibFileName // address of filename of executable module ); lpLibFileName Points to a null-terminated string that names the executable module (either a .DLL or .EXE file). The name specified is the filename of the module and is not related to the name stored in the library module itself, as specified by the LIBRARY keyword in the module-definition (.DEF) file. If the string specifies a path but the file does not exist in the specified directory, the function fails. If a path is not specified and the filename extension is omitted, the default library extension .DLL is appended. However, the filename string can include a trailing point character (.) to indicate that the module name has no extension. ...... the win only load .dll or exe module,you module name is wrong. or you can do: MODULE TestLibDllInterface["libtest-win32-1.0-0.dll"]; |
Автор: | Роман М. [ Среда, 19 Май, 2010 15:01 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Провёл такой тест: Код: MODULE TestLibLoad; IMPORT SYSTEM, WinApi; PROCEDURE MessageBox (title, msg: ARRAY OF CHAR; buttons: SET): INTEGER; BEGIN RETURN WinApi.MessageBoxW(0, msg, title, {}) END MessageBox; PROCEDURE Run*; VAR r: INTEGER; h: WinApi.HANDLE; BEGIN h := WinApi.LoadLibrary("libtest-win32-1.0-0.dll"); IF h # 0 THEN r := WinApi.FreeLibrary(h); r := MessageBox("Info", "DLL loaded successfully.", {}) END END Run; END TestLibLoad. ![]() Сообщается об успешной загрузке libtest-win32-1.0-0.dll . ![]() Так что ошибка именно в BlackBox. |
Автор: | Иван Горячев [ Среда, 19 Май, 2010 15:01 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Как уже указал maliya, имя библиотеки в TestLibDllInt нужно было задавать полное, с расширением. Иначе загрузчик ищет файл libtest-win32-1.0-0, а не libtest-win32-1.0-0.dll P.S. В ББ конечно есть косяки, но напраслину не надо, да? |
Автор: | Роман М. [ Среда, 19 Май, 2010 16:08 ] |
Заголовок сообщения: | Re: Code file for ... not found |
Понял. Признаю свою ошибку. Я полагал, что расширение BlackBox добавляет сам. maliya и Иван, спасибо вам за пояснение. Надо читать внимательнее в следующий раз. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |