Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error by running hello world #22

Open
TheBrainScrambler opened this issue Mar 19, 2019 · 11 comments
Open

Error by running hello world #22

TheBrainScrambler opened this issue Mar 19, 2019 · 11 comments

Comments

@TheBrainScrambler
Copy link

TheBrainScrambler commented Mar 19, 2019

Hello, I tried to run the hello world with the shard file including qt5.cr but I'm getting this error

while requiring "qt5" (Exception) Unhandled exception: Error opening file 'crystal' with mode 'r': No such file or directory (Errno) Failed to raise an exception: END_OF_STACK [0x55756f7a67e6] ??? [0x55756ee8e10b] __crystal_raise +43 [0x55756ee8f915] ??? [0x55756ee9ff6f] ??? [0x55756ee99a8c] ??? [0x55756ee98d79] ??? [0x55756ee95798] ??? [0x55756eec870d] ??? [0x55756ee921cd] main +45 [0x7fb2ed1c2223] __libc_start_main +243 [0x55756ee8a4ce] _start +46 [0x0] ???

Any solutions ?

@jadeeyre
Copy link

jadeeyre commented Apr 8, 2019

Having the same problem - Linux 4.19.27-gentoo-r1 dev-qt/qtcore 5.11.3-r2

while requiring "qt5" (Exception)
Unhandled exception: Error opening file 'crystal' with mode 'r': No such file or directory (Errno)
Failed to raise an exception: END_OF_STACK
[0x558ea0224416] ???
[0x558e9f8ffd79] __crystal_raise +153
[0x558e9f901468] ???
[0x558e9f912ead] ???
[0x558e9f90c32a] ???
[0x558e9f90b53d] ???
[0x558e9f907f20] ???
[0x558e9f93a589] ???
[0x558e9f9049dd] main +45
[0x7f75b09b6ae7] __libc_start_main +231
[0x558e9f8fc40a] _start +42
[0x0] ???

@docelic
Copy link
Collaborator

docelic commented May 29, 2020

@TheBrainScrambler I am going to close this ticket because a sample project created using the following steps is tested and working:

  1. crystal init app test

  2. In its shard.yml:

name: test
version: 0.1.0

targets:
  test:
    main: src/test.cr

crystal: 0.34.0

license: MIT

dependencies:
  qt5:
    github: Papierkorb/qt5.cr
    branch: master-ready-to-use
  1. Run shards

  2. In src/test.cr you can put the hello world code:

require "qt5"


qApp = Qt::Application.new

label = Qt::Label.new "Hello from Crystal/Qt!"
label.show

Qt::Application.exec
  1. Running crystal src/test.cr opens the GUI window

Feel free to open a new issue if you'll have other problems.

@docelic docelic closed this as completed May 29, 2020
@TheBrainScrambler
Copy link
Author

Hello again. After following your steps on Arch Linux with crystal, shards and qt5-base installed, it ... doesn't work. Here is the new error :


There was a problem expanding macro 'macro_140018970143472'

Code in lib/qt5/src/qt5/binding.cr:6:1

 6 | {% begin %}
     ^
Called macro defined in lib/qt5/src/qt5/binding.cr:6:1

 6 | {% begin %}

Which expanded to:

 > 1 | 
 > 2 |   
 > 3 |   require "./binding/binding_linux-gnu-x86_64-qt5.15"
         ^
Error: can't find file './binding/binding_linux-gnu-x86_64-qt5.15' relative to '/home/the_pumpkin_man/test/lib/qt5/src/qt5/binding.cr'```

@docelic
Copy link
Collaborator

docelic commented Jun 22, 2020

Heya,
This would mean that the Qt bindings have not been generated.

If you use the master branch then you need to generate the bindings yourself, and this is supported up to version Qt 5.13 (5.14 and 5.15 are not problematic to build, but nevertheless still require some little updates to config/*.yml files). The instructions how to configure and run the build are included in the README (search for (Re)generating all Qt5 binding versions and 1 section below it).

To avoid building yourself and use some of the earlier, pre-built versions (as mentioned, up to and including 5.13), switch to the branch master-ready-to-use. The prebuilt files will be present/existing in the searched location.

Finally, the third thing which is useful to say, is that it would also be useful if the Qt bindings would auto-detect the Qt version already present on the system and build bindings for that version, instead of versions listed in support/generate_bindings.cr. A patch for this exists in @ZaWertun's fork but needs to be refined and integrated.

Let us know if you need additional assistance/instructions.

@docelic docelic reopened this Jun 22, 2020
@TheBrainScrambler
Copy link
Author

Um, I actually followed your instructions, that means I used the master-ready-to-use branch. But by seeking my Qt version I get 5.15.0-3. Since your said it is a "problematic" version, does that mean the master-ready-to-use branch doesn't work on it and I have to generate the bindings myself ?

@docelic
Copy link
Collaborator

docelic commented Jun 22, 2020

Correct. You'd have to use the master branch and generate the bindings yourself by updating support/generate_bindings.cr and running the generation process. (You would just add a line for Qt 5.15 in that .cr file, and disable/comment all the others (since you only want 5.15).
Then when you run the generation of bindings, it would download Qt 5.15 into the local cache folder, unpack it, and generate bindings from that. This will require about 500MB for the Qt 5.15 archive, and a couple GBs of disk space when unpacked.)

However, as mentioned in previous answer, it won't work out of the box as Qt 5.14 and Qt 5.15 add some new enums, and you will need to add those missing enums to file config/enums.yml. Also, because these new enums are only present in Qt version 5.14 and later, and some only in Qt 5.15 and later, you will have to wrap them inside "if_...newer_or_5.14" and "if..._newer_or_5.15".

I can't get to doing this myself in the next ~10 days, but you can attempt to do this yourself, and you can ask more specific questions in this ticket. Also @ZaWertun may be able to chime in with help too.

Let us know how it goes.

(Note that if you just want to generate the bindings for yourself without submitting a patch to us, then you don't have to bother with "if...newer" at all. Simply add the missing enums to the file. And, regarding the question of which enums to add -- well, when you run the generation, the build will fail and tell you which enums are missing, so you can take this list and add them. There are about 5 or 6 of them in total if I am not mistaken.)

@TheBrainScrambler
Copy link
Author

Oh, sorry then, I don't really want to bother with that ... I just wanted it to work out-of-the-box for testing things, and not trying to generate bindings. Since it isn't really your fault, I will just close this issue. It is an old one anyway.

@docelic
Copy link
Collaborator

docelic commented Jun 23, 2020

OK, when we add support for 5.15 I will let you know on this ticket.

@alexbottoni
Copy link

I just followed the instruction given to TheBrainScrambler on May, the 29, 2020 and the compiler stopped on this error:

$ crystal src/test.cr
Showing last frame. Use --error-trace for full trace.

In lib/qt5/src/qt5/binding.cr:7:20

7 | {% use_binding = run("#{DIR}/../../support/decide_binding_fast.cr") %}
^--
Error: Error executing run (exit code: 1): /home/alex/Laboratory/Crystal/test/lib/qt5/src/qt5/../../support/decide_binding_fast.cr

stdout:

stderr:

In support/decide_binding_slow.cr:7:8

 7 | YAML.mapping(find_paths: Bindgen::FindPath::Configuration)
          ^------
Warning: Deprecated YAML.mapping. use YAML::Serializable instead (the legacy behaviour is also available in a shard at github:crystal-lang/yaml_mapping.cr)

In support/decide_binding_slow.cr:7:3

 7 | YAML.mapping(find_paths: Bindgen::FindPath::Configuration)
     ^
Warning: expanding macro
    
There was a problem expanding macro 'mapping'

Called macro defined in /usr/share/crystal/src/yaml/mapping.cr:222:3

 222 | macro mapping(**_properties_)

Which expanded to:

 > 1 |     ::YAML.mapping({find_paths: Bindgen::FindPath::Configuration})
   2 |   
Warning: Deprecated YAML.mapping. use YAML::Serializable instead (the legacy behaviour is also available in a shard at github:crystal-lang/yaml_mapping.cr)

My configuration is as follows.
$ crystal --version
Crystal 0.35.1 [5999ae29b] (2020-06-19)

LLVM: 8.0.0
Default target: x86_64-unknown-linux-gnu

$ cat /etc/os-release
NAME="Linux Mint"
VERSION="20 (Ulyana)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 20"
VERSION_ID="20"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=ulyana
UBUNTU_CODENAME=focal

$ uname -r
5.4.0-59-generic

$ qtdiag  SIGINT(2) ↵  10:22:52
Qt 5.9.7 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.3.0) on "xcb"
OS: Linux Mint 20 [linux version 5.4.0-59-generic]

Architecture: x86_64; features: SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX AVX2

Let me know if I can give you some more info or I can do anything else to fix/bypass this problem.

@docelic
Copy link
Collaborator

docelic commented Jan 7, 2021

Hey @alexbottoni it seems to me that the error report you included prints the warnings about YAML.mapping, but not the actual error. Can you check that?

Also please let us know whether you tried to generate the bindings yourself or you used the master-ready-to-use branch.

@docelic docelic reopened this Jan 7, 2021
@alexbottoni
Copy link

Hi docelic. I'm not sure how to extract the actual error. Can you give me instructions?

I used the master-ready-to-use branch. My shard.yml is as follows.

name: test
version: 0.1.0

targets:
  test:
    main: src/test.cr

crystal: 0.34.0

license: MIT

dependencies:
  qt5:
    github: Papierkorb/qt5.cr
    branch: master-ready-to-use

Anyway, I tried to run the same command with the error tracing activated. Here the result:

$ crystal build src/test.cr --error-trace                                                                                          
In src/test.cr:1:1

 1 | require "qt5"
     ^
Error: while requiring "qt5"


In lib/qt5/src/qt5.cr:5:1

 5 | require "./qt5/binding"
     ^
Error: while requiring "./qt5/binding"


In lib/qt5/src/qt5/binding.cr:6:1

 6 | {% begin %}
     ^
Error: expanding macro


In lib/qt5/src/qt5/binding.cr:7:20

 7 | {% use_binding = run("#{__DIR__}/../../support/decide_binding_fast.cr") %}
                      ^--
Error: Error executing run (exit code: 1): /home/alex/Laboratory/Crystal/test/lib/qt5/src/qt5/../../support/decide_binding_fast.cr 

stdout:

stderr:

    In support/decide_binding_slow.cr:7:8
    
     7 | YAML.mapping(find_paths: Bindgen::FindPath::Configuration)
              ^------
    Warning: Deprecated YAML.mapping. use YAML::Serializable instead (the legacy behaviour is also available in a shard at github:crystal-lang/yaml_mapping.cr)
    
    In support/decide_binding_slow.cr:7:3
    
     7 | YAML.mapping(find_paths: Bindgen::FindPath::Configuration)
         ^
    Warning: expanding macro
    
    
    There was a problem expanding macro 'mapping'
    
    Called macro defined in /usr/share/crystal/src/yaml/mapping.cr:222:3
    
     222 | macro mapping(**_properties_)
    
    Which expanded to:
    
     > 1 |     ::YAML.mapping({find_paths: Bindgen::FindPath::Configuration})
       2 |   
    Warning: Deprecated YAML.mapping. use YAML::Serializable instead (the legacy behaviour is also available in a shard at github:crystal-lang/yaml_mapping.cr)
    
    A total of 2 warnings were found.
    Unhandled exception: Error opening directory: '/usr/bin/python3': Not a directory (File::Error)
      from ../../../../../../../usr/share/crystal/src/crystal/system/unix/dir.cr:6:5 in 'open'
      from ../../../../../../../usr/share/crystal/src/dir.cr:19:12 in 'initialize'
      from ../../../../../../../usr/share/crystal/src/dir.cr:17:3 in 'new'
      from ../../../../../../../usr/share/crystal/src/dir.cr:31:11 in 'glob'
      from ../../../../../../../usr/share/crystal/src/dir/glob.cr:28:3 in 'glob'
      from ../../../../../../../usr/share/crystal/src/dir/glob.cr:13:5 in '[]'
      from lib/bindgen/src/bindgen/find_path/match_finder.cr:48:9 in 'run_path_try'
      from lib/bindgen/src/bindgen/find_path/match_finder.cr:22:11 in 'run_version_check'
      from lib/bindgen/src/bindgen/find_path/versioned_match_finder.cr:17:9 in 'collect'
      from lib/bindgen/src/bindgen/find_path.cr:76:19 in 'find'
      from lib/bindgen/src/bindgen/find_path.cr:49:12 in 'find_all!'
      from support/decide_binding_slow.cr:18:1 in '__crystal_main'
      from ../../../../../../../usr/share/crystal/src/crystal/main.cr:105:5 in 'main_user_code'
      from ../../../../../../../usr/share/crystal/src/crystal/main.cr:91:7 in 'main'
      from ../../../../../../../usr/share/crystal/src/crystal/main.cr:114:3 in 'main'
      from __libc_start_main
      from _start
      from ???
    Unhandled exception: Support script decide_binding_slow.cr failed (Exception)
      from ???
      from ???
      from __crystal_main
      from main
      from __libc_start_main
      from _start
      from ???

Given the error regarding qt5 (that should be correctly installed and available) I tried to re-install shards:

$ shards                                                                                                                           
Resolving dependencies
Fetching https://github.com/Papierkorb/qt5.cr.git
Failed to update https://github.com/Papierkorb/qt5.cr.git       // Have I to worry about this line?

$ shards install                                                                                                                   
Resolving dependencies
Fetching https://github.com/Papierkorb/qt5.cr.git
Fetching https://github.com/Papierkorb/bindgen.git
Fetching https://github.com/Papierkorb/toka.git
Using toka (0.1.2)
Using bindgen (0.7.0 at 5730ce0)
Using qt5 (0.2.0 at b574f43)

I have got the same error as before. Please note that:

$ qtdiag                                                                                                                   
Qt 5.9.7 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.3.0) on "xcb" 
OS: Linux Mint 20 [linux version 5.4.0-59-generic]

and:

$ sudo apt-get install qtbase5-dev                                                                                                   
...
qtbase5-dev è già alla versione più recente (5.12.8+dfsg-0ubuntu1).    // Should it be 5.9.7? apt-get decided for this...
(most recent version already installed)

Let me know if I can be of any help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants