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

Роман М. писал(а):
Поясните мне как понимать сообщение
Цитата:
command error: code file for libgobject-2.0-0 not found
здесь "code file" = "dll"-библиотека

Автор:  Роман М. [ Понедельник, 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:
:!: DevLinker.LinkDll libtest.dll := TestLibDll~

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. И наконец, запустите
:!: TestLibLoad.Run

Получим ошибку
Цитата:
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)?
I have checked, no problem.
Я заново скомпилировал эскпортируемый (export) интерфейс модуля TestLibDll, скомпоновал (linked) в файл libtest.dll, переименовал в "libtest-win32-1.0-0.dll" (проблема именно в файле с таким именем). Затем перезапустил BlackBox и получил ту же ошибку при запуске TestLibLoad.Run.
Зато с именем файла libtest.dll таких проблем не замечено.

Люди, проверьте, сможет ли кто из вас воспроизвести мою ошибку.

Автор:  maliya [ Среда, 19 Май, 2010 13:44 ]
Заголовок сообщения:  Re: Code file for ... not found

In my system use your example

Вложения:
Test.rar [2.81 КБ]
Скачиваний: 479

Автор:  Роман М. [ Среда, 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.

:!: TestLibLoad.Run
Сообщается об успешной загрузке libtest-win32-1.0-0.dll . :roll:

Так что ошибка именно в 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/