草庐IT

c++ - 将静态库链接到共享库并隐藏导出的符号

我的链接器有一个烦人的问题。我想将一些符号从共享库链接到静态库,但不导出它的符号(即,我不能简单地合并库或与--whole-archive链接)。我想要的是链接(如链接可执行文件,解决undefinedsymbol)我的共享库到静态库并删除undefinedsymbol。我正在寻找的东西可能只是一个链接器选项,但我无法找到它。我会尽力描述问题(这并不容易),然后提供一个玩具最小的例子来玩。简要说明:我想使用LD_PRELOAD在可执行文件中捕获一些函数调用的技巧。此可执行文件链接到第三方共享库,其中包含我要捕获的函数的函数定义。这个第三方库还包含来自另一个库的符号,我也在我的库中使用它

c++ - Visual Studio 15 __imp___iob,__imp___pctype,__imp___mb_cur_max

我正在尝试在VisualStudio中使用用mingw编译的库。但是,我收到以下链接器错误:errorLNK2001:unresolvedexternalsymbol__imp___ioberrorLNK2019:unresolvedexternalsymbol__imp___pctypereferencedinfunctionerrorLNK2019:unresolvedexternalsymbol__imp____mb_cur_maxreferencedinfunctionerrorLNK2001:unresolvedexternalsymbol_fprintf我可以通过链接leg

c++ - Visual Studio 15 __imp___iob,__imp___pctype,__imp___mb_cur_max

我正在尝试在VisualStudio中使用用mingw编译的库。但是,我收到以下链接器错误:errorLNK2001:unresolvedexternalsymbol__imp___ioberrorLNK2019:unresolvedexternalsymbol__imp___pctypereferencedinfunctionerrorLNK2019:unresolvedexternalsymbol__imp____mb_cur_maxreferencedinfunctionerrorLNK2001:unresolvedexternalsymbol_fprintf我可以通过链接leg

c++ - 添加私有(private)成员变量如何破坏 C++ ABI 兼容性?

pimplidiom常用来允许更改动态链接库中的代码,而不会破坏ABI兼容性并且不必重新编译依赖于库的所有代码。大部分explanations我看到提到添加一个新的私有(private)成员变量会更改类中公共(public)和私有(private)成员的偏移量。这对我来说很有意义。我不明白的是,这实际上是如何破坏依赖库的。我对ELF文件以及动态链接的实际工作原理进行了大量阅读,但我仍然看不到更改共享库中的类大小会如何破坏。例如这是我编写的一个测试应用程序(a.out),它使用来自测试共享库(libInterface.so)的代码(Interface::some_method):agut

c++ - 添加私有(private)成员变量如何破坏 C++ ABI 兼容性?

pimplidiom常用来允许更改动态链接库中的代码,而不会破坏ABI兼容性并且不必重新编译依赖于库的所有代码。大部分explanations我看到提到添加一个新的私有(private)成员变量会更改类中公共(public)和私有(private)成员的偏移量。这对我来说很有意义。我不明白的是,这实际上是如何破坏依赖库的。我对ELF文件以及动态链接的实际工作原理进行了大量阅读,但我仍然看不到更改共享库中的类大小会如何破坏。例如这是我编写的一个测试应用程序(a.out),它使用来自测试共享库(libInterface.so)的代码(Interface::some_method):agut

c++ - 如何在 Visual C++ 中同时创建 .lib 文件和 .exe 文件?

我目前有一个创建.exe文件的控制台项目;我希望它还创建一个.lib文件,以便其他项目(编译为DLL)能够调用原始项目中的函数。我知道这是可能的,但我找不到如何做到这一点。如何告诉链接器也链接一个.lib? 最佳答案 仅作为引用发布我知道原始帖子是很久以前发布的,但这仍然适用于需要解决此问题的任何人。转到您要为其创建.lib文件的项目并按照以下步骤操作:右键单击项目。选择属性。选择构建事件。选择预链接事件。最后在命令行中粘贴:@ECHOON@ECHO"$(VC_ExecutablePath_x86)\lib.exe"/out:"$(

c++ - 如何在 Visual C++ 中同时创建 .lib 文件和 .exe 文件?

我目前有一个创建.exe文件的控制台项目;我希望它还创建一个.lib文件,以便其他项目(编译为DLL)能够调用原始项目中的函数。我知道这是可能的,但我找不到如何做到这一点。如何告诉链接器也链接一个.lib? 最佳答案 仅作为引用发布我知道原始帖子是很久以前发布的,但这仍然适用于需要解决此问题的任何人。转到您要为其创建.lib文件的项目并按照以下步骤操作:右键单击项目。选择属性。选择构建事件。选择预链接事件。最后在命令行中粘贴:@ECHOON@ECHO"$(VC_ExecutablePath_x86)\lib.exe"/out:"$(

c++ - 如何解决 "error LNK2019: unresolved external symbol"?

这个问题在这里已经有了答案:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个回答)关闭8年前.我正在开发这个MFC应用程序,它需要一个嵌入式数据库。因此,我开始为它寻找一个灵活、快速的“可嵌入”数据库,并偶然发现了SQLite。我用它创建了一个数据库,并用VisualStudio2008创建了一个静态库项目。该库项目将用于另一个主项目。在库项目中,我使用方法AddFeedToDB(CFeedf)创建了一个类DBClass。库项目使用来自codeproject(cppsqlite3.li

c++ - 如何解决 "error LNK2019: unresolved external symbol"?

这个问题在这里已经有了答案:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个回答)关闭8年前.我正在开发这个MFC应用程序,它需要一个嵌入式数据库。因此,我开始为它寻找一个灵活、快速的“可嵌入”数据库,并偶然发现了SQLite。我用它创建了一个数据库,并用VisualStudio2008创建了一个静态库项目。该库项目将用于另一个主项目。在库项目中,我使用方法AddFeedToDB(CFeedf)创建了一个类DBClass。库项目使用来自codeproject(cppsqlite3.li

c++ - 在 Release模式下编译时,大量嵌套循环会导致链接器无休止地运行吗?

我正在VS2010Release模式下编译一个非常小的Win32命令行应用程序,所有速度优化都已打开(不是内存优化)。此应用程序旨在服务于单一目的-执行单个预定义的复杂数学运算,以找到特定问题的复杂解决方案。该算法功能齐全(已确认),并且在Debug模式下编译和运行良好。但是,当我在Release模式下编译时(算法足够大,可以利用优化),Link.exe似乎无休止地运行,并且代码永远不会完成链接。它的CPU使用率为100%,内存使用率没有变化(43,232K)。我的应用程序只包含两个类,它们都是非常短的代码文件。但是,该算法包含20个左右的嵌套循环,每个层内都有内联函数调用。链接器是否