草庐IT

c++ - Microsoft 的 GCC 选项 init_priority 是什么?

在编译和链接C++库或程序时,无法保证翻译单元之间静态C++对象的初始化顺序。GCCoffersinit_priority解决静态存档、共享对象和程序的问题:init_priority(priority)    InStandardC++,objectsdefinedatnamespacescopeareguaranteedto    beinitializedinanorderinstrictaccordancewiththatoftheir    definitionsinagiventranslationunit.Noguaranteeismadefor    initializ

c++ - 链接器。如何同时定义和取消定义符号?

$nm--demangle/usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/libsupc++.a|grep"__cxxabiv1::__class_type_info::~__class_type_info"给出以下输出:0000000000000000T__cxxabiv1::__class_type_info::~__class_type_info()0000000000000000T__cxxabiv1::__class_type_info::~__class_type_info()0000000000000000T__cxxabiv1::__c

c++ - g++ 中未定义的 Python 引用

我正在使用以下命令:g++-L/usr/lib/panda3d-L/usr/lib-o"panda3dplayground"./main.o-lpython2.7-lp3pystub-lp3framework-lpandafx-lp3pystub-lpandaexpress-lpanda-lp3framework-lp3direct我收到以下错误:/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyObject_Cmp'/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyUnicod

c++ - 休斯顿,我们有一个 undefined reference

MEGAEDIT3000我发现了undefinedreference的原因。我检查了我的.o文件中的符号,它们只是丢失了。只是不在那里。没有明显的原因。我已经检查了危害.o文件的来源,但似乎一切正常。我认为它可能是那些讨厌的#ifdef...#endifblock之一,像熊陷阱一样狡猾地隐藏在代码行中,等待它的受害者。但我找不到任何。将一些函数定义移动到文件的末尾并将它们包含在适用于Linux的#ifdef...#endifblock中后,符号神奇地出现了,一切都很好。感谢您的宝贵时间。Outdated,donotread.Ihavebeenassignedtoonebigprojec

c++ - 如果在同一翻译单元中调用函数,为什么需要重定位

所以我有两个文件,一个是我的库,一个是主程序可执行文件。图书馆:staticintinternal1(inta,intb){returna+b;}namespace{intinternal2(inta,intb){returna+b;}}voidexternal2(intqq,intzz){}voidexternal(inta,intb){external2(a,b);internal1(a,b);internal2(a,b);}编译为g++-c-O0-fPIC-olibtest.olibtest.cpp和g++-shared-olibtest.solibtest.o主要程序:exte

c++ - 如何在 Microsoft Visual C++ 中导入 dllimport

我有一个DLL,我想使用它的一些功能。#includeusingnamespacestd;extern"C"__declspec(dllimport)intInitialize(char*localPort,char*adminServerName,intrpcTimeout);intmain(){intres=Initialize("7864","6000@kabc",10000);return0;}我没有DLL的.lib文件,所以无论如何我都可以链接到它。我想到的一件事是使用LoadLibrary函数,然后使用GetProcAddress()。还有其他办法吗?当我编译下面的代码时错

c++ - 枚举和枚举类的链接兼容性

假设有一个使用枚举类的C++11API://api.hppenumclassE{A,B,C};voidf(E);...//api.cppvoidf(Ee){if(e==E::A)...}现在假设我想使用这个API,但我没有C++11编译器。所以我:修改api.hpp并将枚举类更改为常规枚举。编写一些包含修改后的api.hpp并正常使用API的代码(例如调用f)。使用我的非C++11编译器编译此代码并将其链接到使用C++11编译器编译的API实现(使用未修改的api.hpp)。这似乎适用于GCC,但总体来说是否安全,或者我是在玩火(违反ODR等)?假设这两个编译器在其他方面是链接兼容的,

c++ - 链接到 boost::program_options 不能正常工作

存在以下库文件:cls/usr/local/Cellar/boost/1.51.0/lib$lslibboost_program*libboost_program_options-mt.alibboost_program_options-mt.dylib我在#include中包含以下标题:cls/usr/local/Cellar/boost/1.51.0/include$lsboost/program_options.hppboost/program_options.hpp我尝试将库链接到-lboost_program_options-mt-L/usr/local/Cellar/boo

c++ - 使用 LLVM pass 添加内在函数

我已经使用LLVM传递向输入代码添加了一个内在函数。我能够看到内部调用,但我无法弄清楚如何将代码编译到我的目标架构(x86_64)。我正在运行以下命令:clang++$(llvm-config--ldflags--libsall)ff.s-ofoo但是链接器提示undefinedreference:/tmp/ff-2ada42.o:Infunction`fact(unsignedint)':/home/rubens/Desktop/ff.cpp:9:undefinedreferenceto`llvm.x86.sse3.mwait.i32.i32'/tmp/ff-2ada42.o:Inf

c++ - LLVM/Clang 是否支持弱链接的 'weak' 属性?

简而言之:LLVM/Clang是否支持“弱”属性?我正在学习一些Arduino库源代码(更详细的是HardwareSerial.cpp),我发现了一些以前从未使用过的有趣属性weak:#ifdefined(HAVE_HWSERIAL0)voidserialEvent()__attribute__((weak));boolSerial0_available()__attribute__((weak));#endif我发现它很有趣,而且我读到如果未定义,链接器应将其设置为NULL。但是,在我使用Clang进行的测试中,我无法使用它。文件lib.cpp:#include"lib.h"#inc