Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Making a stand alone program on Linux
QtWS25 Last Chance

Making a stand alone program on Linux

Scheduled Pinned Locked Moved Unsolved General and Desktop
9 Posts 3 Posters 2.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Alien51A Offline
    Alien51A Offline
    Alien51
    wrote on last edited by
    #1

    I recently started using QT. I have version 5.6 installed on Linux Mint 17.3. I wrote a C program that just uses a simple terminal interface that crunches some numbers while a simple printf() displays status. The program runs fine while in the QT IDE.

    However, the compiled program does not execute when I click on it from the directory folder, nor if i type its name when in terminal and in its directory.

    What am I missing here? Does QT IDE have to be running to run the program? I want to simply run the program by clicking on it, or enter terminal and type its name, or from a system() call from another program. What do I need to set or change to make this work?

    kshegunovK 1 Reply Last reply
    0
    • Alien51A Alien51

      I recently started using QT. I have version 5.6 installed on Linux Mint 17.3. I wrote a C program that just uses a simple terminal interface that crunches some numbers while a simple printf() displays status. The program runs fine while in the QT IDE.

      However, the compiled program does not execute when I click on it from the directory folder, nor if i type its name when in terminal and in its directory.

      What am I missing here? Does QT IDE have to be running to run the program? I want to simply run the program by clicking on it, or enter terminal and type its name, or from a system() call from another program. What do I need to set or change to make this work?

      kshegunovK Offline
      kshegunovK Offline
      kshegunov
      Moderators
      wrote on last edited by kshegunov
      #2

      @Alien51

      What am I missing here?

      You are probably missing the whole loader conundrum, but what errors you get from the app when you try to run it in the terminal? Is it "ld can't find whateverlibrary"?

      1. If so, you either install that library in a location known to the loader (also called dynamic linker on Linux). This is usually /lib or /usr/lib and you usually do that through your distro's repository.
      2. Or, you set up the path from the command line LD_LIBRARY_PATH=/path/to/library/ld/cant/find:$LD_LIBRARY_PATH ./myexecutable.
      3. Or, you set the rpath field in the ELF header of he application.

      My advice is go with 1, and if it's impossible then switch to 3. Number 2 is mostly discouraged. Also, please, do search the forums, I remember answering a very similar question yesterday, or the day before.

      Does QT IDE have to be running to run the program?

      Nope. This is all a Linux specific issue.

      Kind regards.

      Read and abide by the Qt Code of Conduct

      1 Reply Last reply
      0
      • hskoglundH Offline
        hskoglundH Offline
        hskoglund
        wrote on last edited by
        #3

        Hi, just to add to @kshegunov, if your app runs fine when launched from inside Qt Creator, but not outside of it, most likely it's Qt's dlls/.so files that are not seen find by the app.

        When you start your app from Qt Creator, it injects a LD_LIBRARY_PATH=/home/yourname/Qt/5.6/gcc_64/lib into your app's environment (@kshegunov's no.2 above) so that your app will find Qt's .so files and start ok.

        But it should run fine anyway, because when building your program, Qt inserts the same path (/home/yourname/Qt/5.6/gcc_64/lib) into your program's rpath so it should start also outside of Qt Creator.

        Perhaps check that rpath with the chrpath utility?

        1 Reply Last reply
        0
        • Alien51A Offline
          Alien51A Offline
          Alien51
          wrote on last edited by
          #4

          the chrpath utility show RPATH=$ORIGIN

          1 Reply Last reply
          0
          • Alien51A Offline
            Alien51A Offline
            Alien51
            wrote on last edited by Alien51
            #5

            It looks like the problem is not with my program, but with it being a console program. In the QT IDE when I run, a terminal window opens and it works correctly. A text menu shows from using printf() and I choose an option what to do that gets its input from a scanf(); Standard C stuff.

            Outside of QT, my program is launching, but the error I get is program not found. I though that meant my program, but it appears it cannot find the terminal or command shell program. My program writes a text log file for any errors encountered. I wrote myself a message and it created the file so my program is executing before it exits at the first printf().

            I am not sure what program QT is trying to open to create a console. The IDE seems to be opening a console that is part of QT instead of the Linux one.

            The same program compiled and run on my WIndows machine opens a command shell when run automatically. I tried executing the Linux version from the command line while in terminal as root. My program runs, creates and writes my test message file then exits at the first printf() because it cannot open whatever it is that QT opens when run from the IDE.

            1 Reply Last reply
            0
            • hskoglundH Offline
              hskoglundH Offline
              hskoglund
              wrote on last edited by
              #6

              I see, a console program. When you start a console program from inside Qt Creator, it starts a child process called qt_creator_process_stub which then runs the usual /bin/sh shell and your program with it.
              So it should really behave the same way as when you start your app from Terminal.

              Funny though, I remember having also problems with printf(), not that my console program crashed, rather that there was no output (I just now created a simple console test program with a printf("Hello world"); to see if it crashes, but of course it runs just fine, both from Qt Creator and from Terminal).

              Anyway, I remember getting around that printf() problem by #including <QTextStream> and setting up a QTextStream instance to stdout, putting out text this way:

              QTextStream cout(stdout);
              cout << "Hello world" << endl;
              

              Maybe it'll work you too.

              P.S. Funny about your RPATH just having $ORIGIN and not also :/home/yourname/Qt/5.6/gcc/lib sure you're not doing anything fancy in your .pro file, like QMAKE_LFLAGS or such?

              1 Reply Last reply
              0
              • Alien51A Offline
                Alien51A Offline
                Alien51
                wrote on last edited by
                #7

                I am using a fresh install of QT using default everything. I merely copied my C source (not C++) over to my Linux machine and compiled. The program is POSIX compliant code.

                Maybe I need to include a QT special header to get the console to come up.

                kshegunovK 1 Reply Last reply
                0
                • hskoglundH Offline
                  hskoglundH Offline
                  hskoglund
                  wrote on last edited by
                  #8

                  Sure, it could be some missing special sauce/setting you need.

                  You could try creating a simple "Hello World" Qt Console Application using Qt Creator's New Project wizard. If printf() works in that app, then try copy/paste your C code into it:

                  #include <QCoreApplication>
                  
                  int main(int argc, char *argv[])
                  {
                      QCoreApplication a(argc, argv);
                  
                  // your C code goes here
                      printf("Hello Qt\n");
                  
                  // last line
                      return a.exec();
                  }
                  
                  1 Reply Last reply
                  0
                  • Alien51A Alien51

                    I am using a fresh install of QT using default everything. I merely copied my C source (not C++) over to my Linux machine and compiled. The program is POSIX compliant code.

                    Maybe I need to include a QT special header to get the console to come up.

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by
                    #9

                    @Alien51
                    Please provide the link line from your build, the command line with which you are trying to start your program and the exact error you're getting. Otherwise we are just forced to guess.

                    Read and abide by the Qt Code of Conduct

                    1 Reply Last reply
                    0

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved