Linking against an external object file (.o) with autoconf2019 Community Moderator ElectionAutoconf — including a static library (newbie)Is there a standard way of checking for a named executable with autoconfCMAKE: Build library and link against itBuilding a Shared Library but linking against a Static OneLinking step doesn't get object files from correct locationHow to specify different feedback for different platforms if AC_CHECK_HEADER fails in autoconf/configure.ac?autoconf: Set AC_CHECK_LIB compiler flagsplacing object files in different directories in nonrecursive buildAutotools: Optionally compile and link against a third-party libraryAutomake and external conditional sources

What materials can be used to make a humanoid skin warm?

When a wind turbine does not produce enough electricity how does the power company compensate for the loss?

What will happen if my luggage gets delayed?

Is it a Cyclops number? "Nobody" knows!

Proving a statement about real numbers

How many characters using PHB rules does it take to be able to have access to any PHB spell at the start of an adventuring day?

Plausibility of Mushroom Buildings

How do we create new idioms and use them in a novel?

From an axiomatic set theoric approach why can we take uncountable unions?

How does Ehrenfest's theorem apply to the quantum harmonic oscillator?

Can the alpha, lambda values of a glmnet object output determine whether ridge or Lasso?

Are all players supposed to be able to see each others' character sheets?

Can one live in the U.S. and not use a credit card?

Can we track matter through time by looking at different depths in space?

Doubts in understanding some concepts of potential energy

Does an unused member variable take up memory?

Why do phishing e-mails use faked e-mail addresses instead of the real one?

School performs periodic password audits. Is my password compromised?

Professor forcing me to attend a conference, I can't afford even with 50% funding

Is it possible to find 2014 distinct positive integers whose sum is divisible by each of them?

Getting the || sign while using Kurier

Trig Subsitution When There's No Square Root

I reported the illegal activity of my boss to his boss. My boss found out. Now I am being punished. What should I do?

Is a piano played in the same way as a harmonium?



Linking against an external object file (.o) with autoconf



2019 Community Moderator ElectionAutoconf — including a static library (newbie)Is there a standard way of checking for a named executable with autoconfCMAKE: Build library and link against itBuilding a Shared Library but linking against a Static OneLinking step doesn't get object files from correct locationHow to specify different feedback for different platforms if AC_CHECK_HEADER fails in autoconf/configure.ac?autoconf: Set AC_CHECK_LIB compiler flagsplacing object files in different directories in nonrecursive buildAutotools: Optionally compile and link against a third-party libraryAutomake and external conditional sources










0















For work purposes I need to link against an object file generated by another program and found in its folder, the case is that I did not find information about this kind of linkage. I think that if I hardcode the paths and put the name-of-obj.o in front of the package_LDADD variable should work, but the case is that I don't want to do it that way.



If the object is not found I want the configure to fail and tell the user that the name-of-obj.o is missing.



I tried by using AC_LIBOBJ([name-of-obj.o]) but this will try to find in the root directory a name-of-obj.c and compile it.



Any tip or solution around this issue?



Thank you!










share|improve this question




























    0















    For work purposes I need to link against an object file generated by another program and found in its folder, the case is that I did not find information about this kind of linkage. I think that if I hardcode the paths and put the name-of-obj.o in front of the package_LDADD variable should work, but the case is that I don't want to do it that way.



    If the object is not found I want the configure to fail and tell the user that the name-of-obj.o is missing.



    I tried by using AC_LIBOBJ([name-of-obj.o]) but this will try to find in the root directory a name-of-obj.c and compile it.



    Any tip or solution around this issue?



    Thank you!










    share|improve this question


























      0












      0








      0








      For work purposes I need to link against an object file generated by another program and found in its folder, the case is that I did not find information about this kind of linkage. I think that if I hardcode the paths and put the name-of-obj.o in front of the package_LDADD variable should work, but the case is that I don't want to do it that way.



      If the object is not found I want the configure to fail and tell the user that the name-of-obj.o is missing.



      I tried by using AC_LIBOBJ([name-of-obj.o]) but this will try to find in the root directory a name-of-obj.c and compile it.



      Any tip or solution around this issue?



      Thank you!










      share|improve this question
















      For work purposes I need to link against an object file generated by another program and found in its folder, the case is that I did not find information about this kind of linkage. I think that if I hardcode the paths and put the name-of-obj.o in front of the package_LDADD variable should work, but the case is that I don't want to do it that way.



      If the object is not found I want the configure to fail and tell the user that the name-of-obj.o is missing.



      I tried by using AC_LIBOBJ([name-of-obj.o]) but this will try to find in the root directory a name-of-obj.c and compile it.



      Any tip or solution around this issue?



      Thank you!







      makefile gnu autotools configure autoconf






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 6 at 14:48







      Marc43

















      asked Mar 6 at 14:23









      Marc43Marc43

      1112311




      1112311






















          1 Answer
          1






          active

          oldest

          votes


















          1















          I need to link against an object file generated by another program and
          found in its folder




          What you describe is a very unusual requirement, not among those that the Autotools are designed to handle cleanly or easily. In particular, Autoconf has no mechanisms specifically applicable to searching for bare object files, as opposed to libraries, and Automake has no particular automation around including such objects when it links. Nevertheless, these tools do have enough general purpose functionality to do what you want; it just won't be as tidy as you might like.




          I think that if I hardcode the paths and put the
          name-of-obj.o in front of the package_LDADD variable should work, but
          the case is that I don't want to do it that way.




          I take it that it is the "hardcode the paths" part that you want to avoid. Adding an item to an appropriate LDADD variable is not negotiable; it is the right way to get your object included in the link.




          If the object is not found I want the configure to fail and tell the
          user that the name-of-obj.o is missing.




          Well, then, the key thing appears to be to get configure to perform a search for your object file. Autoconf does not have a built-in mechanism to perform such a search, but it's just a macro-based shell-script generator, so you can write such a search in shell script + Autoconf, maybe something like this:



          AC_MSG_CHECKING([for name-of-obj.o])
          OTHER_LOCATION=
          for my_dir in
          /some/location/other_program/src
          /another/location/other_program.12345/src
          $srcdir/../relative/location/other_program/src; do
          AS_IF([test -r "$my_dir/name-of-obj.o"], [
          # optionally, perform any desired test to check that the object is usable
          # ... perhaps one using AC_LINK_IFELSE ...
          # if it passes, then
          OTHER_LOCATION=$my_dir
          break
          ])
          done

          # Check whether the object was in fact discovered, and act appropriately
          AS_IF([test "x$OTHER_LOCATION" = x], [
          # Not found
          AC_MSG_RESULT([not found])
          AC_MSG_ERROR([Cannot configure without name-of-obj.o])
          ], [
          AC_MSG_RESULT([$OTHER_LOCATION/name-of-obj.o])
          AC_SUBST([OTHER_LOCATION])
          ])


          That's functional, but of course you could embellish, such as by providing for the package builder to specify a location to use via a command-line argument (AC_ARG_WITH(...)). And if you want to do this for multiple objects, then you would probably want to wrap up at least some of that into a custom macro.



          The Automake side is much less involved. To get the object linked, you just need to add it to the appropriate LDADD variable, using the output variable created by the above, such as:



          foo_LDADD = $(OTHER_LOCATION)/name-of-obj.o


          Note that if you're building just one program target then you can use the general LDADD instead of foo_LDADD, but note that by default these are alternatives not complements.




          With that said, this is a bad idea overall. If you want to link something that is not part of your project, then you should get it from an installed library. That can be a local, custom-built library, of course, so long as it is a library, not a bare object file, and it is installed. It can be a static library if you don't want to rely on or distribute a separate shared library.



          On the other hand, if your project is part of a larger build, then the best approach is probably to integrate it into that build, maybe as a subproject. It would still be best to link a library instead of a bare object file, but in a subproject context it might make sense to use a lib that was not installed to the build system. In conjunction with a command-line argument that tells it where to find the wanted lib, this could make the needed Autoconf code much cleaner and clearer.






          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55025353%2flinking-against-an-external-object-file-o-with-autoconf%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1















            I need to link against an object file generated by another program and
            found in its folder




            What you describe is a very unusual requirement, not among those that the Autotools are designed to handle cleanly or easily. In particular, Autoconf has no mechanisms specifically applicable to searching for bare object files, as opposed to libraries, and Automake has no particular automation around including such objects when it links. Nevertheless, these tools do have enough general purpose functionality to do what you want; it just won't be as tidy as you might like.




            I think that if I hardcode the paths and put the
            name-of-obj.o in front of the package_LDADD variable should work, but
            the case is that I don't want to do it that way.




            I take it that it is the "hardcode the paths" part that you want to avoid. Adding an item to an appropriate LDADD variable is not negotiable; it is the right way to get your object included in the link.




            If the object is not found I want the configure to fail and tell the
            user that the name-of-obj.o is missing.




            Well, then, the key thing appears to be to get configure to perform a search for your object file. Autoconf does not have a built-in mechanism to perform such a search, but it's just a macro-based shell-script generator, so you can write such a search in shell script + Autoconf, maybe something like this:



            AC_MSG_CHECKING([for name-of-obj.o])
            OTHER_LOCATION=
            for my_dir in
            /some/location/other_program/src
            /another/location/other_program.12345/src
            $srcdir/../relative/location/other_program/src; do
            AS_IF([test -r "$my_dir/name-of-obj.o"], [
            # optionally, perform any desired test to check that the object is usable
            # ... perhaps one using AC_LINK_IFELSE ...
            # if it passes, then
            OTHER_LOCATION=$my_dir
            break
            ])
            done

            # Check whether the object was in fact discovered, and act appropriately
            AS_IF([test "x$OTHER_LOCATION" = x], [
            # Not found
            AC_MSG_RESULT([not found])
            AC_MSG_ERROR([Cannot configure without name-of-obj.o])
            ], [
            AC_MSG_RESULT([$OTHER_LOCATION/name-of-obj.o])
            AC_SUBST([OTHER_LOCATION])
            ])


            That's functional, but of course you could embellish, such as by providing for the package builder to specify a location to use via a command-line argument (AC_ARG_WITH(...)). And if you want to do this for multiple objects, then you would probably want to wrap up at least some of that into a custom macro.



            The Automake side is much less involved. To get the object linked, you just need to add it to the appropriate LDADD variable, using the output variable created by the above, such as:



            foo_LDADD = $(OTHER_LOCATION)/name-of-obj.o


            Note that if you're building just one program target then you can use the general LDADD instead of foo_LDADD, but note that by default these are alternatives not complements.




            With that said, this is a bad idea overall. If you want to link something that is not part of your project, then you should get it from an installed library. That can be a local, custom-built library, of course, so long as it is a library, not a bare object file, and it is installed. It can be a static library if you don't want to rely on or distribute a separate shared library.



            On the other hand, if your project is part of a larger build, then the best approach is probably to integrate it into that build, maybe as a subproject. It would still be best to link a library instead of a bare object file, but in a subproject context it might make sense to use a lib that was not installed to the build system. In conjunction with a command-line argument that tells it where to find the wanted lib, this could make the needed Autoconf code much cleaner and clearer.






            share|improve this answer





























              1















              I need to link against an object file generated by another program and
              found in its folder




              What you describe is a very unusual requirement, not among those that the Autotools are designed to handle cleanly or easily. In particular, Autoconf has no mechanisms specifically applicable to searching for bare object files, as opposed to libraries, and Automake has no particular automation around including such objects when it links. Nevertheless, these tools do have enough general purpose functionality to do what you want; it just won't be as tidy as you might like.




              I think that if I hardcode the paths and put the
              name-of-obj.o in front of the package_LDADD variable should work, but
              the case is that I don't want to do it that way.




              I take it that it is the "hardcode the paths" part that you want to avoid. Adding an item to an appropriate LDADD variable is not negotiable; it is the right way to get your object included in the link.




              If the object is not found I want the configure to fail and tell the
              user that the name-of-obj.o is missing.




              Well, then, the key thing appears to be to get configure to perform a search for your object file. Autoconf does not have a built-in mechanism to perform such a search, but it's just a macro-based shell-script generator, so you can write such a search in shell script + Autoconf, maybe something like this:



              AC_MSG_CHECKING([for name-of-obj.o])
              OTHER_LOCATION=
              for my_dir in
              /some/location/other_program/src
              /another/location/other_program.12345/src
              $srcdir/../relative/location/other_program/src; do
              AS_IF([test -r "$my_dir/name-of-obj.o"], [
              # optionally, perform any desired test to check that the object is usable
              # ... perhaps one using AC_LINK_IFELSE ...
              # if it passes, then
              OTHER_LOCATION=$my_dir
              break
              ])
              done

              # Check whether the object was in fact discovered, and act appropriately
              AS_IF([test "x$OTHER_LOCATION" = x], [
              # Not found
              AC_MSG_RESULT([not found])
              AC_MSG_ERROR([Cannot configure without name-of-obj.o])
              ], [
              AC_MSG_RESULT([$OTHER_LOCATION/name-of-obj.o])
              AC_SUBST([OTHER_LOCATION])
              ])


              That's functional, but of course you could embellish, such as by providing for the package builder to specify a location to use via a command-line argument (AC_ARG_WITH(...)). And if you want to do this for multiple objects, then you would probably want to wrap up at least some of that into a custom macro.



              The Automake side is much less involved. To get the object linked, you just need to add it to the appropriate LDADD variable, using the output variable created by the above, such as:



              foo_LDADD = $(OTHER_LOCATION)/name-of-obj.o


              Note that if you're building just one program target then you can use the general LDADD instead of foo_LDADD, but note that by default these are alternatives not complements.




              With that said, this is a bad idea overall. If you want to link something that is not part of your project, then you should get it from an installed library. That can be a local, custom-built library, of course, so long as it is a library, not a bare object file, and it is installed. It can be a static library if you don't want to rely on or distribute a separate shared library.



              On the other hand, if your project is part of a larger build, then the best approach is probably to integrate it into that build, maybe as a subproject. It would still be best to link a library instead of a bare object file, but in a subproject context it might make sense to use a lib that was not installed to the build system. In conjunction with a command-line argument that tells it where to find the wanted lib, this could make the needed Autoconf code much cleaner and clearer.






              share|improve this answer



























                1












                1








                1








                I need to link against an object file generated by another program and
                found in its folder




                What you describe is a very unusual requirement, not among those that the Autotools are designed to handle cleanly or easily. In particular, Autoconf has no mechanisms specifically applicable to searching for bare object files, as opposed to libraries, and Automake has no particular automation around including such objects when it links. Nevertheless, these tools do have enough general purpose functionality to do what you want; it just won't be as tidy as you might like.




                I think that if I hardcode the paths and put the
                name-of-obj.o in front of the package_LDADD variable should work, but
                the case is that I don't want to do it that way.




                I take it that it is the "hardcode the paths" part that you want to avoid. Adding an item to an appropriate LDADD variable is not negotiable; it is the right way to get your object included in the link.




                If the object is not found I want the configure to fail and tell the
                user that the name-of-obj.o is missing.




                Well, then, the key thing appears to be to get configure to perform a search for your object file. Autoconf does not have a built-in mechanism to perform such a search, but it's just a macro-based shell-script generator, so you can write such a search in shell script + Autoconf, maybe something like this:



                AC_MSG_CHECKING([for name-of-obj.o])
                OTHER_LOCATION=
                for my_dir in
                /some/location/other_program/src
                /another/location/other_program.12345/src
                $srcdir/../relative/location/other_program/src; do
                AS_IF([test -r "$my_dir/name-of-obj.o"], [
                # optionally, perform any desired test to check that the object is usable
                # ... perhaps one using AC_LINK_IFELSE ...
                # if it passes, then
                OTHER_LOCATION=$my_dir
                break
                ])
                done

                # Check whether the object was in fact discovered, and act appropriately
                AS_IF([test "x$OTHER_LOCATION" = x], [
                # Not found
                AC_MSG_RESULT([not found])
                AC_MSG_ERROR([Cannot configure without name-of-obj.o])
                ], [
                AC_MSG_RESULT([$OTHER_LOCATION/name-of-obj.o])
                AC_SUBST([OTHER_LOCATION])
                ])


                That's functional, but of course you could embellish, such as by providing for the package builder to specify a location to use via a command-line argument (AC_ARG_WITH(...)). And if you want to do this for multiple objects, then you would probably want to wrap up at least some of that into a custom macro.



                The Automake side is much less involved. To get the object linked, you just need to add it to the appropriate LDADD variable, using the output variable created by the above, such as:



                foo_LDADD = $(OTHER_LOCATION)/name-of-obj.o


                Note that if you're building just one program target then you can use the general LDADD instead of foo_LDADD, but note that by default these are alternatives not complements.




                With that said, this is a bad idea overall. If you want to link something that is not part of your project, then you should get it from an installed library. That can be a local, custom-built library, of course, so long as it is a library, not a bare object file, and it is installed. It can be a static library if you don't want to rely on or distribute a separate shared library.



                On the other hand, if your project is part of a larger build, then the best approach is probably to integrate it into that build, maybe as a subproject. It would still be best to link a library instead of a bare object file, but in a subproject context it might make sense to use a lib that was not installed to the build system. In conjunction with a command-line argument that tells it where to find the wanted lib, this could make the needed Autoconf code much cleaner and clearer.






                share|improve this answer
















                I need to link against an object file generated by another program and
                found in its folder




                What you describe is a very unusual requirement, not among those that the Autotools are designed to handle cleanly or easily. In particular, Autoconf has no mechanisms specifically applicable to searching for bare object files, as opposed to libraries, and Automake has no particular automation around including such objects when it links. Nevertheless, these tools do have enough general purpose functionality to do what you want; it just won't be as tidy as you might like.




                I think that if I hardcode the paths and put the
                name-of-obj.o in front of the package_LDADD variable should work, but
                the case is that I don't want to do it that way.




                I take it that it is the "hardcode the paths" part that you want to avoid. Adding an item to an appropriate LDADD variable is not negotiable; it is the right way to get your object included in the link.




                If the object is not found I want the configure to fail and tell the
                user that the name-of-obj.o is missing.




                Well, then, the key thing appears to be to get configure to perform a search for your object file. Autoconf does not have a built-in mechanism to perform such a search, but it's just a macro-based shell-script generator, so you can write such a search in shell script + Autoconf, maybe something like this:



                AC_MSG_CHECKING([for name-of-obj.o])
                OTHER_LOCATION=
                for my_dir in
                /some/location/other_program/src
                /another/location/other_program.12345/src
                $srcdir/../relative/location/other_program/src; do
                AS_IF([test -r "$my_dir/name-of-obj.o"], [
                # optionally, perform any desired test to check that the object is usable
                # ... perhaps one using AC_LINK_IFELSE ...
                # if it passes, then
                OTHER_LOCATION=$my_dir
                break
                ])
                done

                # Check whether the object was in fact discovered, and act appropriately
                AS_IF([test "x$OTHER_LOCATION" = x], [
                # Not found
                AC_MSG_RESULT([not found])
                AC_MSG_ERROR([Cannot configure without name-of-obj.o])
                ], [
                AC_MSG_RESULT([$OTHER_LOCATION/name-of-obj.o])
                AC_SUBST([OTHER_LOCATION])
                ])


                That's functional, but of course you could embellish, such as by providing for the package builder to specify a location to use via a command-line argument (AC_ARG_WITH(...)). And if you want to do this for multiple objects, then you would probably want to wrap up at least some of that into a custom macro.



                The Automake side is much less involved. To get the object linked, you just need to add it to the appropriate LDADD variable, using the output variable created by the above, such as:



                foo_LDADD = $(OTHER_LOCATION)/name-of-obj.o


                Note that if you're building just one program target then you can use the general LDADD instead of foo_LDADD, but note that by default these are alternatives not complements.




                With that said, this is a bad idea overall. If you want to link something that is not part of your project, then you should get it from an installed library. That can be a local, custom-built library, of course, so long as it is a library, not a bare object file, and it is installed. It can be a static library if you don't want to rely on or distribute a separate shared library.



                On the other hand, if your project is part of a larger build, then the best approach is probably to integrate it into that build, maybe as a subproject. It would still be best to link a library instead of a bare object file, but in a subproject context it might make sense to use a lib that was not installed to the build system. In conjunction with a command-line argument that tells it where to find the wanted lib, this could make the needed Autoconf code much cleaner and clearer.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Mar 6 at 16:41

























                answered Mar 6 at 15:40









                John BollingerJohn Bollinger

                83.4k74279




                83.4k74279





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55025353%2flinking-against-an-external-object-file-o-with-autoconf%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    1928 у кіно

                    Захаров Федір Захарович

                    Ель Греко