草庐IT

c++ - 如何跨共享对象管理 C++ 仅 header 库的编译

我正在开发一个大型软件包,其中包含许多编译为共享对象的包。出于性能原因,我想用vector指令编译Eigen3(一个仅包含头文件的库),但是模板化方法正在到处编译。如何确保Eigen函数被编译到特定的目标文件中?该软件包含约2000个单独的软件包。为了保持开发以合理的速度进行,推荐的编译程序的方法是稀疏地checkout一些包并编译它们,之后可以使用预编译(通过某些CI系统)共享库来执行程序。问题是我的部分职责是优化程序的CPU时间。为此,我想用-march标志编译我正在处理的包(我们称它为A.so),以便Eigen可以利用现代SIMD处理器扩展名。不幸的是,因为Eigen是一个只有头

c++ - 如何解决基于调用点的不同行为的函数?

不确定如何命名标题,所以可以随意重命名,但我遇到的问题是我有一个功能在一个项目中有效,但在另一个项目中却失败了。下面是粗略的伪代码,显示LibraryProject中的一个调用有效,而GameProject中的调用无效。在ChildClass::do_stuff中,win32_windowHWND是有效的,而第二个failed_win32_window是null并且glfw抛出一个错误说它没有初始化,尽管它已经被初始化(因为第一次glfw调用成功并且我手动逐步验证它是):GLFWError#65537Happen,TheGLFWlibraryisnotinitialized这是显示两个

c++ - 来自其他链接单元的垃圾

在讨论this主题时,我问自己以下问题。是否存在翻译单元中一些未使用的代码链接到GCC和VC++等流行编译器的最终可执行代码(当然是在Release模式下)的情况?例如假设我们有2个编译单元://A.hpp//Herearedeclarationsofsomeclasses,functions,externvariablesetc.和源文件//A.cpp//definationofA.hppdeclarations最后是主要内容//main.cpp//includingA.hpplibrary#include"A.hpp"//herewewillusesomestufffromA.hp

c++ - libgcc_s.so : undefined reference to `__stack_chk_fail@GLIBC_2.4'

起初我警告说我/不是程序员,而只是管理员我试图理解一些操作当我安装Oracle制作的程序时,我收到日志消息:/usr/bin/make-fins_precomp.mkrelinkORACLE_HOME=/u01/oracle/OraHome_1EXENAME=proc/Linking/u01/oracle/OraHome_1/precomp/lib/proclibgcc_s.so:undefinedreferenceto__stack_chk_fail@GLIBC_2.4'`ls-l../libgcc_s.so->/lib/libgcc_s.so.1所以接下来我尝试通过以下方式进行诊断

c++ - Xcode4 : "bad codegen, pointer diff" linker error again

这个问题与此相关:"badcodegen,pointerdiff"linkererrorwithXcode4和"badcodegen,pointerdiffinboost"errorin32-bitbuild和XCode3.2.6and4linkererrorsld:badcodegen,pointerdiffin...toglobalweaksymbol我目前正在将我的所有项目升级到Xcode4,但我遇到了一些奇怪的事情。-仅当我构建通用二进制文件或32位版本时才会出现上述错误。如果我只坚持64位,一切正常。我正在自己构建一个自定义静态库,现在我不在该代码中使用任何可见性设置(即at

c++ - 愉快地链接不兼容的类型会导致困惑

我一直在尝试找出g++的一些边界,尤其是链接(C++)目标文件。我发现了以下好奇心,在提问之前我试图尽可能压缩。代码文件common.h#ifndef_COMMON_H#define_COMMON_H#include#defineTMPL_Y(name,T)\structY{\Ty;\voidf(){\std::couty=name;\std::coutf();\y->vf();\}#endif文件a.cpp使用g++-Wall-ca.cpp编译#include"common.h"TMPL_Y('a',char);TMPL_Z(Za);TMPL_Z_impl('a',Za);文件b.c

c++ - 如何正确地进行显式模板实例化?

我正在使用模板来实现CRTP模式。使用下面的代码,我得到链接器错误(对于基类CPConnectionBase中定义的所有方法),如下所示:errorLNK2001:unresolvedexternalsymbol"public:void__thiscallCPConnectionBase::start(void)"(?start@?$CPConnectionBase@VTNCPConnection@@@@QAEXXZ)我想这里的解决方案是显式模板实例化。事实上,我可以在添加时构建我的代码#include"TNCPConnection.h"templateclassCPConnectio

c++ - 对 `GdiplusStartup@12' 的 undefined reference

我正在寻找一种将GDI+库与g++编译器一起使用的方法,我在网上阅读了一些指南,但仍然遇到问题...这是我的代码:#include"gdiplus.h"usingnamespaceGdiplus;//SkipLinesGdiplusStartup(&lpGdiplusToken,&gdiplusStartupInput,&gdiplusStartupOutput);//SkipLines而且我已经使用了编译器开关,如下所示:g++-Wall-mwindows-lgdiplus-I"C:\MinGW\include"-I"C:\MinGW\include\gdiplus"-L"C:\Mi

c++ - 如何让好友功能有内部链接

我需要确保声明为某个C++类的友元的C++函数具有内部链接。我需要函数成为友元的原因是因为它需要访问那个类的私有(private)成员,一个缓存函数结果的私有(private)成员。函数需要是同一个类的非成员(或者至少不是实例成员)的原因是因为其他代码需要能够获取指向它的非成员函数指针。重构这个太昂贵了。我需要它有内部链接的原因是因为会有很多这样的函数,而在AIX上,它们太多会导致链接时出现TOC溢出错误。这可以使用-bbigtoc链接器开关来克服,但我目前正在努力避免这种情况。此外,我真的很希望能够将类声明保留在头文件中,但将函数本身放在包含实现的.cxx文件中。总而言之,现在我有这

c++ - VS2010 无法链接它应该构建的库

我在尝试构建我的DLL项目时遇到了VS2010的问题。DLL本身生成得很好,但我需要与其他依赖项目链接的.lib文件失败。我有一个经典的__declspec(dllexport)和所有东西,不用担心,构建在Debug模式下完美运行。我只在Release模式下遇到这个问题,但我不认为我搞砸了我的设置(它们几乎是默认设置)。这是我得到的输出错误(未解析的外部符号):Erreur274errorLNK1120:1externesnonrésolus\Release\Engine.libEngineErreur273errorLNK2001:symboleexternenonrésoluApp