有没有人知道如何使用GCC将任何资源文件静态编译到可执行文件或共享库文件中?
例如,我想添加永远不会改变的图像文件(如果他们这样做,我不得不替换文件),并且不希望它们在文件系统中存在.
如果这是可能的(我认为这是因为Visual C++ for Windows也可以这样做),我如何加载存储在自己的二进制文件中的文件?可执行文件是否解析自身,找到文件并从中提取数据?
也许GCC有一个选项,我还没有见过.使用搜索引擎并没有真正吐出正确的东西.
我需要这个用于共享库和普通的ELF可执行文件.
任何帮助表示赞赏
我有这个示例代码
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) 当我在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".
这是一个错误吗?
我已经用一个小的图形用户界面实现了一些应用程序.没有什么复杂的,但我遇到了几个问题,组件没有显示或只是没有按预期运行.
现在我的问题:
你如何规划这些用户界面?当你需要做出改变时你会怎么做?你如何调试奇怪的行为?!
这适用于几乎所有类型的gui设计.当然,使用Microsofts Visual Studio,你有一个很大的优势,因为你几乎得到了你在设计师看到的东西.
是否存在针对AWT 的优秀开源(或免费软件)设计器?已经环顾四周,没有找到真正聪明的东西.
编辑:到现在为止,我还手工创建了所有的GUI.当然它是更清晰的代码,但有时很难找到布局错误.如果MS的Visual Studio能够创建大致干净的代码,为什么不是其他代码?
我听说过一些Eclipse Visual设计师.这个已经准备就绪吗?
我正在将一些共享对象文件编译成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)
知道我做错了什么吗?
编辑:
当我尝试切换时 …
在深入研究文档后,我无法找到以下问题的答案:
是否有任何理由反对使用this引用当前对象,如下例所示?
type MyStruct struct {
someField string
}
func (this MyStruct) getSomeField() string {
return this.someField
}
Run Code Online (Sandbox Code Playgroud) 我有以下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.
任何想法都表示赞赏.
在我的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组件实例.
我该怎么调试呢?这已成为一个相当大的项目.有什么要寻找的提示吗?
我有一个查询输出这样的东西:
+-------+----+--------------+
| 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 …
我缩短的简化课程如下:
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().但这也会释放其他线程等待锁定 - 这绝对不是我想要的.
任何的想法?
最好的问候托比亚斯