我有3个项目A、B和C。A是通用的,被B使用,最终被C使用。B比较特殊,目前只有C使用。现在,因为我希望A和B尽可能地被重用,所以我认为它们都是静态库。所以我将A和B链接到静态库,将C链接到可执行文件,但是当我想链接C它给了我一些关于A函数的undefinedreference错误。所以我将库A添加到链接器选项来解决这个问题,但它没有帮助。所以我想:当我想部署B时,我也必须部署A才能链接。有没有办法将静态库A链接到静态库B,这样我就不必部署2个文件?如果是这样,我该如何使用EclipseCDT实现这一点,因为我找不到为归档程序定义其他目标的地方。添加我在linux下工作,但这些东西也应
我的构建过程包括Qt的qmakeMakefile生成器和与linux捆绑在一起的典型make实用程序。我的应用程序由几个共享库组成,主应用程序链接到它们。如何在我的库中应用典型的Linux版本控制方案?(使用版本2->针对foo.so.2的链接,该链接指向foo.so.2.y.z,并带有ldconfig生成的链接)。答案不必特定于我的构建过程。 最佳答案 您的库应命名为libfoo.so.2.y.z,符号链接(symboliclink)为libfoo.so.2和libfoo.so指着那个。该库应该在链接器命令行中使用-sonamel
我的构建过程包括Qt的qmakeMakefile生成器和与linux捆绑在一起的典型make实用程序。我的应用程序由几个共享库组成,主应用程序链接到它们。如何在我的库中应用典型的Linux版本控制方案?(使用版本2->针对foo.so.2的链接,该链接指向foo.so.2.y.z,并带有ldconfig生成的链接)。答案不必特定于我的构建过程。 最佳答案 您的库应命名为libfoo.so.2.y.z,符号链接(symboliclink)为libfoo.so.2和libfoo.so指着那个。该库应该在链接器命令行中使用-sonamel
在一个项目中,我的同事创建了一个静态库,例如liba.a,它与应用程序链接。在liba.a中,他将libcmalloc()覆盖为他的所有者版本。我创建了一个共享库libs.so,它也与应用链接。问题是当我的libs.so与应用程序链接时,我的libs.so中使用的malloc()将是liba.a中的那个,不是标准libc.so中的那个,这会导致问题。然后,我想将libc.a静态链接到我的libs.so,我为gcc使用了-static-shared-fPIcflags。但我总是得到arm-2012.03/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.
在一个项目中,我的同事创建了一个静态库,例如liba.a,它与应用程序链接。在liba.a中,他将libcmalloc()覆盖为他的所有者版本。我创建了一个共享库libs.so,它也与应用链接。问题是当我的libs.so与应用程序链接时,我的libs.so中使用的malloc()将是liba.a中的那个,不是标准libc.so中的那个,这会导致问题。然后,我想将libc.a静态链接到我的libs.so,我为gcc使用了-static-shared-fPIcflags。但我总是得到arm-2012.03/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.
我的应用程序动态加载liba.so(使用dlopen)。liba.so使用libb.so所以我想将liba.so链接到libb.so。如何在Linux中执行此操作?提前致谢。 最佳答案 如果你自己构建liba.so,你需要用-l选项链接它gcc-oliba.soliba.o-L/libb/path-lb如果您没有liba源,也许您可以创建libawrapper.so链接到liba和libb并动态加载这个库gcc-olibawrap.so-L/liba/-L/libb/-la-lb 关
我的应用程序动态加载liba.so(使用dlopen)。liba.so使用libb.so所以我想将liba.so链接到libb.so。如何在Linux中执行此操作?提前致谢。 最佳答案 如果你自己构建liba.so,你需要用-l选项链接它gcc-oliba.soliba.o-L/libb/path-lb如果您没有liba源,也许您可以创建libawrapper.so链接到liba和libb并动态加载这个库gcc-olibawrap.so-L/liba/-L/libb/-la-lb 关
我有一个用于NASM(ArchLinuxi686)的以下程序SECTION.dataLC1:db"librarycall",0SECTION.textexternexitexternprintf;globalmain;main:global_start_start:pushLC1callprintfpush0callexit用命令组装:nasm-felflibcall.asm如果用_start注释两行,用main取消注释两行,然后用命令进行汇编和链接:gcclibcall.o-olibcall然后程序运行OK。但是,如果使用_start入口点组装代码并使用命令链接:ldlibcall.
我有一个用于NASM(ArchLinuxi686)的以下程序SECTION.dataLC1:db"librarycall",0SECTION.textexternexitexternprintf;globalmain;main:global_start_start:pushLC1callprintfpush0callexit用命令组装:nasm-felflibcall.asm如果用_start注释两行,用main取消注释两行,然后用命令进行汇编和链接:gcclibcall.o-olibcall然后程序运行OK。但是,如果使用_start入口点组装代码并使用命令链接:ldlibcall.
共享库中使用的变量存储在哪里。与应用程序一起使用时。共享库使用相同的应用程序部分(数据/堆栈)。或者他们会有单独的部分。 最佳答案 仅共享包含代码的部分。进程之间不共享变量。 关于c-链接到应用程序时共享库的变量存储在哪里,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/35772133/