我有一个与另一个(第三方)共享库链接的共享库.然后在我的应用程序中使用dlopen加载我的共享库.所有这一切都很好(假设文件在正确的路径等).
现在,问题是当我链接我的库时,我甚至不需要指定链接第三方共享库.GCC接受它而不报告有关未定义引用的错误.那么,问题; 我如何强制GCC通知我未定义的引用?
如果我将库更改为(临时)可执行文件,则会获得未定义的引用(当不向链接器提供库时).(如果我指定它,工作正常.)
即,完成以下操作:
g++ -fPIC -shared -o libb.so b.o
g++ -fPIC -shared -o liba.so a.o
g++ -o a.exe a.cpp
Run Code Online (Sandbox Code Playgroud)
第二行没有给出错误,第三行抱怨未定义的引用.
示例代码:
啊:
class a
{
public:
void foobar();
};
Run Code Online (Sandbox Code Playgroud)
a.cpp:
#include "a.h"
#include "b.h"
void a::foobar()
{
b myB;
myB.foobar();
}
int main()
{
a myA; myA.foobar();
}
Run Code Online (Sandbox Code Playgroud)
BH:
class b
{
public:
void foobar();
};
Run Code Online (Sandbox Code Playgroud)
b.cpp:
#include "b.h"
void b::foobar()
{
}
Run Code Online (Sandbox Code Playgroud) 据我所知,不可能链接使用不同版本的GCC应用程序二进制接口(ABI)的库.是否对每个版本的GCC都进行了ABI更改?如果我使用GCC 4.3.2,是否可以链接使用4.3.1构建的库?是否有某种矩阵列出了我可以组合GCC版本的所有方法?
我有一个类成员myMember,它是一个myType指针.我想在声明为const的函数中分配此成员.我这样做:
void func() const
{
...
const_cast<myType*>(myMember) = new myType();
...
}
Run Code Online (Sandbox Code Playgroud)
这样做在VC++中工作正常,但GCC给出了错误消息"左值作为赋值的左值".
使成员可变允许我简单地删除const_cast并分配值.但是,我并不完全确定这会带来其他副作用.
我可以指定我的会员而不必让会员变成可变的吗?怎么样?是否有任何副作用使成员变得可变?
如何在.deb文件中包含许可协议交互?这个问题对Linux的支持点击直通许可证只要求如果有可能,但不知道如何.另外,我不确定deb软件包的许可证信息是否真的可以使用...
我知道可以将文本作为包描述的一部分包含在内,但我更倾向于将其与Windows MSI安装程序类似.
请注意,我不希望在应用程序第一次运行时弹出许可证.
我正在使用dpkg-deb在Ubuntu 8.10上生成.deb文件.
我有一堆重载函数,可以处理某些数据类型,如int,double和strings.这些函数中的大多数执行相同的操作,其中仅允许一组特定的数据类型.这意味着我无法创建一个简单的通用模板函数,因为我失去了类型安全性(并且可能会导致函数内的验证运行时问题).
是否可以创建"半通用编译时类型安全功能"?如果是这样,怎么样?如果没有,这是否会出现在C++ 0x中?
一个(无效的)想法;
template <typename T, restrict: int, std::string >
void foo(T bar);
...
foo((int)0); // OK
foo((std::string)"foobar"); // OK
foo((double)0.0); // Compile Error
Run Code Online (Sandbox Code Playgroud)
注意:我意识到我可以创建一个具有重载构造函数和赋值运算符的类,并将该类的变量传递给函数.
在将Windows代码移植到Linux时,我在GCC 4.2.3中遇到以下错误消息.(是的,我知道这是一个旧的版本,但我不能轻易升级.)
main.cpp:16: error: call of overloaded ‘list(MyClass&)’ is ambiguous
/usr/include/c++/4.2/bits/stl_list.h:495: note: candidates are: std::list<_Tp, _Alloc>::list(const std::list<_Tp, _Alloc>&) [with _Tp = unsigned char, _Alloc = std::allocator<unsigned char>]
/usr/include/c++/4.2/bits/stl_list.h:484: note: std::list<_Tp, _Alloc>::list(size_t, const _Tp&, const _Alloc&) [with _Tp = unsigned char, _Alloc = std::allocator<unsigned char>]
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码生成此错误.
#include <list>
class MyClass
{
public:
MyClass(){}
operator std::list<unsigned char>() const { std::list<unsigned char> a; return a; }
operator unsigned char() const { unsigned char a; return a; }
};
int main()
{
MyClass a; …Run Code Online (Sandbox Code Playgroud)