小编Atm*_*ons的帖子

使用GCC的C/C++:静态地将资源文件添加到可执行文件/库

有没有人知道如何使用GCC将任何资源文件静态编译到可执行文件或共享库文件中?

例如,我想添加永远不会改变的图像文件(如果他们这样做,我不得不替换文件),并且不希望它们在文件系统中存在.

如果这是可能的(我认为这是因为Visual C++ for Windows也可以这样做),我如何加载存储在自己的二进制文件中的文件?可执行文件是否解析自身,找到文件并从中提取数据?

也许GCC有一个选项,我还没有见过.使用搜索引擎并没有真正吐出正确的东西.

我需要这个用于共享库和普通的ELF可执行文件.

任何帮助表示赞赏

c++ linux gcc shared-libraries elf

88
推荐指数
7
解决办法
6万
查看次数

带指针接收器的Golang方法

我有这个示例代码

package main

import (
    "fmt"
)

type IFace interface {
    SetSomeField(newValue string)
    GetSomeField() string
}

type Implementation struct {
    someField string
}

func (i Implementation) GetSomeField() string {
    return i.someField
}

func (i Implementation) SetSomeField(newValue string) {
    i.someField = newValue
}

func Create() IFace {
    obj := Implementation{someField: "Hello"}
    return obj // <= Offending line
}

func main() {
    a := Create()
    a.SetSomeField("World")
    fmt.Println(a.GetSomeField())
}
Run Code Online (Sandbox Code Playgroud)

SetSomeField 不能正常工作,因为它的接收器不是指针类型.

如果我将方法更改为指针接收器,我期望工作,它看起来像这样:

func (i *Implementation) SetSomeField(newValue string) { ...
Run Code Online (Sandbox Code Playgroud)

编译它会导致以下错误:

prog.go:26: cannot use …
Run Code Online (Sandbox Code Playgroud)

go

37
推荐指数
2
解决办法
3万
查看次数

Java:for-each-loop中的"匿名"数组

当我在for循环中尝试一些特殊的东西时,我发现Java似乎并不喜欢将一个匿名数组作为for-each-loop的源代码:

for (String crt : {"a","b","c"} ) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

实际上不起作用

String[] arr = {"a","b","c"};
for (String crt : arr ) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

确实.

即使将数组转换为String []也无济于事.将光标移到第一个版本上时,eclipse告诉我:

Type mismatch: cannot convert from String[] to String 而意思是"crt".

这是一个错误吗?

java arrays foreach

36
推荐指数
2
解决办法
2万
查看次数

Java AWT/SWT/Swing:如何规划GUI?

我已经用一个小的图形用户界面实现了一些应用程序.没有什么复杂的,但我遇到了几个问题,组件没有显示或只是没有按预期运行.

现在我的问题:

你如何规划这些用户界面?当你需要做出改变时你会怎么做?你如何调试奇怪的行为?!

这适用于几乎所有类型的gui设计.当然,使用Microsofts Visual Studio,你有一个很大的优势,因为你几乎得到了你在设计师看到的东西.

是否存在针对AWT 的优秀开源(或免费软件)设计器?已经环顾四周,没有找到真正聪明的东西.

编辑:到现在为止,我还手工创建了所有的GUI.当然它是更清晰的代码,但有时很难找到布局错误.如果MS的Visual Studio能够创建大致干净的代码,为什么不是其他代码?

我听说过一些Eclipse Visual设计师.这个已经准备就绪吗?

java graphics swing

28
推荐指数
2
解决办法
1万
查看次数

将存档(.a)链接到共享对象(.so)

我正在将一些共享对象文件编译成archive.a:

$ g++ -c -Iinclude/ -fPIC -O0 -o object1.o source1.cpp
$ g++ -c -Iinclude/ -fPIC -O0 -o object2.o source2.cpp
$ ar rvs archive.a object1.o object2.o
r - object1.o
r - object2.o
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.结果archive.a具有一些KB的良好大小.与转储nm相应的对象,文件包含的文件中显示.

现在我想将这些档案中的几个编译成共享对象文件.

g++ -g -O0 -Iinclude/ -I/usr/include/somelibrary -shared -o libLibrary.so archive1.a archive2.a
Run Code Online (Sandbox Code Playgroud)

结果是我生成的库文件几乎为:

$ nm -D libLibrary.so
                 w _Jv_RegisterClasses
0000000000201010 A __bss_start
                 w __cxa_finalize
                 w __gmon_start__
0000000000201010 A _edata
0000000000201020 A _end
0000000000000578 T _fini
0000000000000430 T _init
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?


编辑:

当我尝试切换时 …

c++ linker shared-libraries

19
推荐指数
2
解决办法
1万
查看次数

去"这个"关键字

在深入研究文档后,我无法找到以下问题的答案:

是否有任何理由反对使用this引用当前对象,如下例所示?

type MyStruct struct {
  someField string
}

func (this MyStruct) getSomeField() string {
  return this.someField
}
Run Code Online (Sandbox Code Playgroud)

go

17
推荐指数
1
解决办法
4967
查看次数

避免调用成员变量的构造函数

我有以下C++ - 类:

// Header-File
class A
{
    public:
    A();

    private:
    B m_B;
    C m_C;
};

// cpp-File
A::A()
: m_B(1)
{
    m_B.doSomething();
    m_B.doMore();
    m_C = C(m_B.getSomeValue());
}
Run Code Online (Sandbox Code Playgroud)

我现在想避免class A调用任何的构造函数C m_C.因为在最后一行A::A(),我总是要m_C自己初始化,因为我需要先做好准备m_B.我可以提供一个空的默认构造函数class B.但那不是主意.

我已经尝试添加m_C(NULL)到init-list中A::A().有时它有效,有时它说没有构造函数NULL作为参数.

那我怎么能没有m_C初始化?我知道,通过指针,m_C(NULL)-way可行.我不想动态分配它new.

任何想法都表示赞赏.

c++ initializer-list

11
推荐指数
2
解决办法
5944
查看次数

Vaadin"id xy的连接器已经注册"

在我的Vaadin应用程序的某个地方,只要我使用第二个浏览器进行连接,就会收到此异常

Caused by: java.lang.RuntimeException: A connector with id 22 is already registered! at com.vaadin.ui.ConnectorTracker.registerConnector(ConnectorTracker.java:133)

它总是在同一个地方发生,但我不知道为什么这个原因必须在其他地方.

我想我可能会从其他会话中窃取UI组件 - 这不是我的意图.目前,我没有看到static我可能在多个会话中使用的任何UI组件实例.

我该怎么调试呢?这已成为一个相当大的项目.有什么要寻找的提示吗?

vaadin

11
推荐指数
2
解决办法
4100
查看次数

如何将多个列"内爆"(去标准化/连接)到一个列中?

我有一个查询输出这样的东西:

+-------+----+--------------+
| F_KEY | EV | OTHER_COLUMN |
+-------+----+--------------+
| 100   | 1  | ...          |
| 100   | 2  | ...          |
| 150   | 2  | ...          |
| 100   | 3  | ...          |
| 150   | 4  | ...          |
+-------+----+--------------+
Run Code Online (Sandbox Code Playgroud)

我确信我已经看到了一个聚合函数,它将它(使用GROUP BY F_KEY)变成这样的东西:

+-------+------------+--------------+
| F_KEY | ?          | OTHER_COLUMN |
+-------+------------+--------------+
| 100   | (1, 2, 3)  | ...          |
| 150   | (2, 4)     | ...          |
+-------+------------+--------------+
Run Code Online (Sandbox Code Playgroud)

意味着,它以某种方式将" EV …

t-sql sql-server concatenation

9
推荐指数
1
解决办法
7937
查看次数

"嵌套"scoped_lock

我缩短的简化课程如下:

class A
{
    public:
    // ...
    methodA();
    methodB();

    protected:
    mutable boost::mutex m_mutex;
    sometype*  m_myVar;
}

A::methodA( int someParam )
{
    boost::mutex::scoped_lock myLock(m_mutex);
    m_myVar->doSomethingElse();
}

A::methodB( int someParam )
{
    boost::mutex::scoped_lock myLock(m_mutex);
    m_myVar->doSomething();
    this->methodA(someParam);
}
Run Code Online (Sandbox Code Playgroud)

我想同步访问m_myVar.在调用时A::methodB(),线程会使用相同的互斥锁两次进入锁定状态,并且明显会阻塞第一行A::methodA()

有没有办法在再次传递时scoped_lock不阻止同一个线程

当然,我只是可以打电话m_mutex.unlock().但这也会释放其他线程等待锁定 - 这绝对不是我想要的.

任何的想法?

最好的问候托比亚斯

c++ scoped-lock boost-mutex

7
推荐指数
1
解决办法
1826
查看次数