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. Newbie question - using C

Newbie question - using C

Scheduled Pinned Locked Moved Solved General and Desktop
28 Posts 4 Posters 4.3k 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.
  • M mrjj
    13 Dec 2018, 21:18

    @aethelnorn
    the c code might have some
    ifdef
    ..code..
    endif
    that should be defined for it to link.
    Note that Creator should show if a define is enabled

    alt text

    A Offline
    A Offline
    aethelnorn
    wrote on 14 Dec 2018, 09:41 last edited by
    #19

    @mrjj That is a handy tip - it is 20 years since I coded C/C++ I have been spoiled by Java. Any help from the tools is more than welcome.

    1 Reply Last reply
    0
    • A aha_1980
      13 Dec 2018, 21:19

      @aethelnorn while it in principle possible to compile everything with qmake, the question arises if the external libs should be build with their 'native' buildsystem and just be linked into your project.

      At least thats the way most projects handle it, an thats also cleanest regarding licenses (GPL e.g.)

      A Offline
      A Offline
      aethelnorn
      wrote on 14 Dec 2018, 09:49 last edited by
      #20

      @aha_1980 I can see where you are coming from, but to compile the library first I have to install and understand all the cross-platform compiling technology. This is not something that attracts me. I was hoping that I could delegate that work to Qt. If I need to precompile the libraries then I have two projects (Qt and cross compile system) instead of one. That is very little improvement over my current solution (Xcode & Android projects) and requires extra learning.

      If I can convert an automake project into a Qt project that might help - jpeg-9c is set up for automake. Two Qt projects would be an attractive solution. As this is a private project I will need to wait until this evening to give it some more time.

      As for licensing, both the open source projects I use are very permissive, and the resultant code when finished will be open-sourced (GPL3 most likely if Qt is part of the solution).

      A 1 Reply Last reply 14 Dec 2018, 10:32
      0
      • A aethelnorn
        14 Dec 2018, 09:49

        @aha_1980 I can see where you are coming from, but to compile the library first I have to install and understand all the cross-platform compiling technology. This is not something that attracts me. I was hoping that I could delegate that work to Qt. If I need to precompile the libraries then I have two projects (Qt and cross compile system) instead of one. That is very little improvement over my current solution (Xcode & Android projects) and requires extra learning.

        If I can convert an automake project into a Qt project that might help - jpeg-9c is set up for automake. Two Qt projects would be an attractive solution. As this is a private project I will need to wait until this evening to give it some more time.

        As for licensing, both the open source projects I use are very permissive, and the resultant code when finished will be open-sourced (GPL3 most likely if Qt is part of the solution).

        A Offline
        A Offline
        aha_1980
        Lifetime Qt Champion
        wrote on 14 Dec 2018, 10:32 last edited by
        #21

        @aethelnorn said in Newbie question - using C:

        If I can convert an automake project into a Qt project that might help - jpeg-9c is set up for automake

        Yes, you can do that - I did the same with net-snmp some weeks ago. I have to say it took me 1-2 days to do so, because I throw away automake and therefore had to do all the platform decisions to set defines and compile/exclude C files myself. Advantage is now, that I can cross-compile for ARM immediately - it seems you aim for the same.

        I would really recommend you to separate these libraries from your own project, i.e. create separate .pro files for them.

        Afterwards you can glue all together with a top-level SUBDIRs pro file.

        Regards

        Qt has to stay free or it will die.

        A 1 Reply Last reply 14 Dec 2018, 10:52
        3
        • A aha_1980
          14 Dec 2018, 10:32

          @aethelnorn said in Newbie question - using C:

          If I can convert an automake project into a Qt project that might help - jpeg-9c is set up for automake

          Yes, you can do that - I did the same with net-snmp some weeks ago. I have to say it took me 1-2 days to do so, because I throw away automake and therefore had to do all the platform decisions to set defines and compile/exclude C files myself. Advantage is now, that I can cross-compile for ARM immediately - it seems you aim for the same.

          I would really recommend you to separate these libraries from your own project, i.e. create separate .pro files for them.

          Afterwards you can glue all together with a top-level SUBDIRs pro file.

          Regards

          A Offline
          A Offline
          aethelnorn
          wrote on 14 Dec 2018, 10:52 last edited by
          #22

          @aha_1980 That sounds like a very promising approach. Where would I find some literature on how to convert an automake project into a .pro project. Assume my skill level is 'inexperienced'. The jpeg-9c library needs to be converted. The TinyAES library is just one C and one H file, so is likely not worth converting.

          A 1 Reply Last reply 14 Dec 2018, 11:12
          0
          • A aethelnorn
            14 Dec 2018, 10:52

            @aha_1980 That sounds like a very promising approach. Where would I find some literature on how to convert an automake project into a .pro project. Assume my skill level is 'inexperienced'. The jpeg-9c library needs to be converted. The TinyAES library is just one C and one H file, so is likely not worth converting.

            A Offline
            A Offline
            aha_1980
            Lifetime Qt Champion
            wrote on 14 Dec 2018, 11:12 last edited by
            #23

            @aethelnorn

            Unfortunately, I'm not aware of some conversion step-by-step tutorial...

            Assume my skill level is 'inexperienced'.

            That is not the best start point, but if you are willing to learn still manageable. You'll have a better understanding of the qmake build process afterwards.

            The jpeg-9c library needs to be converted.

            I'd start with building the library on your host system with the usual way, probably

            ./configure --your-wanted-options-here
            make
            

            You should carefully watch the build log and note the compiler switches and defines passed to the source files. You will later need to pass them from qmake.

            Then set up a new qmake project (best in a separate folder) by qmake -project. That will fill the SOURCES and HEADERS field in the pro file for you. You may need to change TEMPLATE=lib and then add QMAKE_CFLAGS as well as DEFINES to imitate the original build.

            Start with the small library to gain some experience, then try the bigger one.

            Good luck!

            Qt has to stay free or it will die.

            A 2 Replies Last reply 14 Dec 2018, 11:38
            4
            • A aha_1980
              14 Dec 2018, 11:12

              @aethelnorn

              Unfortunately, I'm not aware of some conversion step-by-step tutorial...

              Assume my skill level is 'inexperienced'.

              That is not the best start point, but if you are willing to learn still manageable. You'll have a better understanding of the qmake build process afterwards.

              The jpeg-9c library needs to be converted.

              I'd start with building the library on your host system with the usual way, probably

              ./configure --your-wanted-options-here
              make
              

              You should carefully watch the build log and note the compiler switches and defines passed to the source files. You will later need to pass them from qmake.

              Then set up a new qmake project (best in a separate folder) by qmake -project. That will fill the SOURCES and HEADERS field in the pro file for you. You may need to change TEMPLATE=lib and then add QMAKE_CFLAGS as well as DEFINES to imitate the original build.

              Start with the small library to gain some experience, then try the bigger one.

              Good luck!

              A Offline
              A Offline
              aethelnorn
              wrote on 14 Dec 2018, 11:38 last edited by
              #24

              @aha_1980 said in Newbie question - using C:

              @aethelnorn

              Unfortunately, I'm not aware of some conversion step-by-step tutorial...

              Assume my skill level is 'inexperienced'.

              That is not the best start point, but if you are willing to learn still manageable. You'll have a better understanding of the qmake build process afterwards.

              But it is the best starting point for learning something new. Easier to fill an empty cup..... I am not afraid of learning new stuff - I am in my fifth decade of coding, still learning stuff just getting slower.

              The jpeg-9c library needs to be converted.

              I'd start with building the library on your host system with the usual way, probably

              ./configure --your-wanted-options-here
              make
              

              You should carefully watch the build log and note the compiler switches and defines passed to the source files. You will later need to pass them from qmake.

              Then set up a new qmake project (best in a separate folder) by qmake -project. That will fill the SOURCES and HEADERS field in the pro file for you. You may need to change TEMPLATE=lib and then add QMAKE_CFLAGS as well as DEFINES to imitate the original build.

              Sounds feasible. I will have to tease out several features - jpeg-9c contains both library and command line utility source in one dir/make system, and I only want the library. Still it is a promising way forward.

              Start with the small library to gain some experience, then try the bigger one.

              Smaller library is not automake, just make - so likely will be misleadingly simple. But it will introduce me to creating a .pro library

              Good luck!

              Thanks, and thank you for your help (and the others on this thread). I will give this a try over the weekend and report back.

              Aethelnorn

              1 Reply Last reply
              2
              • A aha_1980
                14 Dec 2018, 11:12

                @aethelnorn

                Unfortunately, I'm not aware of some conversion step-by-step tutorial...

                Assume my skill level is 'inexperienced'.

                That is not the best start point, but if you are willing to learn still manageable. You'll have a better understanding of the qmake build process afterwards.

                The jpeg-9c library needs to be converted.

                I'd start with building the library on your host system with the usual way, probably

                ./configure --your-wanted-options-here
                make
                

                You should carefully watch the build log and note the compiler switches and defines passed to the source files. You will later need to pass them from qmake.

                Then set up a new qmake project (best in a separate folder) by qmake -project. That will fill the SOURCES and HEADERS field in the pro file for you. You may need to change TEMPLATE=lib and then add QMAKE_CFLAGS as well as DEFINES to imitate the original build.

                Start with the small library to gain some experience, then try the bigger one.

                Good luck!

                A Offline
                A Offline
                aethelnorn
                wrote on 14 Dec 2018, 19:42 last edited by
                #25

                @aha_1980 Ok, I have done this:

                • run configure with the option set to create a static library only.
                • run make, but I could not find a log (do I need options to produce one?) all I saw was a bunch of 'CC this' and 'CCLD that' commands
                • I copied the .H and .C files I need for jpeglib to a separate folder and ran '~/dev/Qt/5.12.0/clang_64/bin/qmake -project' in it.
                • Changed TEMPLATE=lib

                When I try to 'run' or 'release' (or whatever it is the'play' button is doing) I get a prompt for 'which app to run' (I cancel at this point). Can I assume that the compile and link of the library is happy (I can see warnings but no errors in the compile output window). If I have been successful, then where is my lib? I would like to see it to believe it......

                The last lines in the compile output window are:

                rm -f liblibjpeg.1.0.0.dylib liblibjpeg.dylib liblibjpeg.1.dylib liblibjpeg.1.0.dylib
                /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -stdlib=libc++ -headerpad_max_install_names -arch x86_64 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.12 -Wl,-rpath,@executable_path/Frameworks -Wl,-rpath,/Users/phill/dev/Qt/5.12.0/clang_64/lib -single_module -dynamiclib -compatibility_version 1.0 -current_version 1.0.0 -install_name liblibjpeg.1.dylib -o liblibjpeg.1.0.0.dylib jaricom.o jcapimin.o jcapistd.o jcarith.o jccoefct.o jccolor.o jcdctmgr.o jchuff.o jcinit.o jcmainct.o jcmarker.o jcmaster.o jcomapi.o jcparam.o jcprepct.o jcsample.o jctrans.o jdapimin.o jdapistd.o jdarith.o jdatadst.o jdatasrc.o jdcoefct.o jdcolor.o jddctmgr.o jdhuff.o jdinput.o jdmainct.o jdmarker.o jdmaster.o jdmerge.o jdpostct.o jdsample.o jdtrans.o jerror.o jfdctflt.o jfdctfst.o jfdctint.o jidctflt.o jidctfst.o jidctint.o jmemmgr.o jmemnobs.o jquant1.o jquant2.o jutils.o -F/Users/phill/dev/Qt/5.12.0/clang_64/lib -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL
                ln -s liblibjpeg.1.0.0.dylib liblibjpeg.dylib
                ln -s liblibjpeg.1.0.0.dylib liblibjpeg.1.dylib
                ln -s liblibjpeg.1.0.0.dylib liblibjpeg.1.0.dylib
                19:35:40: The process "/usr/bin/make" exited normally.
                19:35:40: Elapsed time: 00:02.

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  aethelnorn
                  wrote on 14 Dec 2018, 19:50 last edited by
                  #26

                  Whoops, ignore that last comment - I have found my libs (I was looking in the wrong directory - an earlier attempt). But they have become named liblibjpeg.dylib etc. Can I simplify the name?

                  And can you point me to a resource which describes how to make a project using this static lib project. If it were gradle it would be called a 'multiproject'.

                  So thanks to your help I could be on my way here.

                  Aethelnorn

                  A 1 Reply Last reply 14 Dec 2018, 20:16
                  0
                  • A aethelnorn
                    14 Dec 2018, 19:50

                    Whoops, ignore that last comment - I have found my libs (I was looking in the wrong directory - an earlier attempt). But they have become named liblibjpeg.dylib etc. Can I simplify the name?

                    And can you point me to a resource which describes how to make a project using this static lib project. If it were gradle it would be called a 'multiproject'.

                    So thanks to your help I could be on my way here.

                    Aethelnorn

                    A Offline
                    A Offline
                    aha_1980
                    Lifetime Qt Champion
                    wrote on 14 Dec 2018, 20:16 last edited by
                    #27

                    @aethelnorn said in Newbie question - using C:

                    Whoops, ignore that last comment - I have found my libs (I was looking in the wrong directory - an earlier attempt). But they have become named liblibjpeg.dylib etc. Can I simplify the name?

                    Sure. How do you name them in the TARGET line? Just remove the leading "lib" there, it is added automatically (a "convention" for early UNIX times).

                    And can you point me to a resource which describes how to make a project using this static lib project. If it were gradle it would be called a 'multiproject'.

                    As said before, the search term is SUBDIRS, e.g.:

                    • https://stackoverflow.com/questions/1417776/how-to-use-qmakes-subdirs-template
                    • https://wiki.qt.io/SUBDIRS_-_handling_dependencies

                    and - IMPORTANT -

                    • https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

                    might help you in that regard.

                    Qt has to stay free or it will die.

                    A 1 Reply Last reply 14 Dec 2018, 20:18
                    3
                    • A aha_1980
                      14 Dec 2018, 20:16

                      @aethelnorn said in Newbie question - using C:

                      Whoops, ignore that last comment - I have found my libs (I was looking in the wrong directory - an earlier attempt). But they have become named liblibjpeg.dylib etc. Can I simplify the name?

                      Sure. How do you name them in the TARGET line? Just remove the leading "lib" there, it is added automatically (a "convention" for early UNIX times).

                      And can you point me to a resource which describes how to make a project using this static lib project. If it were gradle it would be called a 'multiproject'.

                      As said before, the search term is SUBDIRS, e.g.:

                      • https://stackoverflow.com/questions/1417776/how-to-use-qmakes-subdirs-template
                      • https://wiki.qt.io/SUBDIRS_-_handling_dependencies

                      and - IMPORTANT -

                      • https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

                      might help you in that regard.

                      A Offline
                      A Offline
                      aethelnorn
                      wrote on 14 Dec 2018, 20:18 last edited by
                      #28

                      @aha_1980 Brilliant. Thanks for all your help, I am now optimistic that I will be able to use Qt.

                      1 Reply Last reply
                      0

                      28/28

                      14 Dec 2018, 20:18

                      • Login

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