小编Edw*_*d A的帖子

gbit动态与静态链接差异在32位与64位编译中

在Windows 7 64bit中,我使用MinGW-w64(来自MinGW-build项目,由NiXman提供).具体来说,我正在使用x64-4.8.0-release-win32-sjlj-rev2.7z.x64 =开发机器.Win32 =线程模型.这可以编译32位和64位目标.

当我编译并清空cpp文件时只有一个简单的cp main和一个printf行说你好...我是否将它编译为32位或64位之间存在不一致.

当我编译为32位时 g++ -m32 test.cpp

依赖关系是:

  • LIBGCC_S_SJLJ-1.DLL
  • 的libstdc ++ - 6.DLL
  • KERNEL32.DLL
  • MSVCRT.DLL

当我编译为64位时 g++ -m64 test.cpp

依赖关系只是:

  • KERNEL32.DLL
  • MSVCRT.DLL

在64位模式下编译时,我不明白LIBGCC_S_SJLJ-1LIBSTDC++-6依赖项有什么关系.64位C++编译不需要这两件事吗?或者它们是否自动静态链接?

如果他们自动链接到一个而不是另一个,这是什么原因?

我知道我可以用and LIBGCCLIBSTDC++静态链接32位项目.虽然我不确定这是不是很好的做法. -static-libgcc-static-libstdc++

我尝试过-shared-libgcc,-shared-libstdc++以便我的64位编译具有动态依赖性LIBGCC,LIBSTDC++但是当使用–m64标志(编译为64位)时,g ++拒绝动态链接它们.

我已经读过静态链接LIBGCC,这LIBSTDC++是一件坏事,并且它会阻止人们安全地链接到其他第三方动态库中,因为某些东西(我并不真正理解这个说法).

如果有人能够阐明g ++行为的这种差异以及这方面的最佳实践,我将非常感激.

c++ qt g++

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

win32(全屏)无边框窗口重叠任务栏

我正在尝试创建一个无边框窗口,可能在全屏幕中重叠任务栏(不使用ChangeDisplaySettings(&settings, CDS_FULLSCREEN);),我无法弄清楚如何做到这一点.我已经尝试了几乎所有可能的CreateWindowEx风格组合而没有成功.

它的目的是使用opengl/directx在窗口无边框应用程序中呈现,同时允许在后台继续渲染时进行alt-tabbing.这是由许多游戏完成的,例如wow和dota2(windowed fullscreen选项)以及诸如windows7任务管理器之类的应用程序(在vm 中用两个截图来证明这个想法)(windows8没有这种行为).

任务经理没有关注:

任务经理重点:

这是我用来轻松测试我的一些想法的一些最小代码,但没有一个真正完成它.它只创建一个大小为screenwidth-20和screenheight-20的无边框窗口.

#include <windows.h>

static bool quit = false;

static LRESULT CALLBACK message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)
{
    switch(umsg)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        case WM_CLOSE:
            quit = true;
        break;
    }

    return DefWindowProc(hwnd, umsg, wparam, lparam);
}

int main()
{
    WNDCLASSEX wc;
    HMODULE hInstance;
    HWND hwnd;
    MSG msg;

    ZeroMemory(&msg, sizeof(MSG));
    hInstance = GetModuleHandle(NULL);

    wc.style            = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc.lpfnWndProc      = message_handler;
    wc.cbClsExtra       = …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi windows-8

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

NSAttributedString投影在下行器上进行裁剪

NSMutableAttributedString在iOS6中使用在UILabel子类中应用字距调整和阴影.正确应用属性,但是阴影在第一个字符的左边缘和下行部分的底部进行裁剪(例如小写的p).标签本身已clipsToBounds禁用.

代码...

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:[self text]];
NSRange range = NSMakeRange(0, [attributedString length]);

NSNumber *kern = [NSNumber numberWithFloat:0.75f];
[attributedString addAttribute:NSKernAttributeName value:kern range:range];

NSShadow *shadow = [[NSShadow alloc] init];
[shadow setShadowBlurRadius:3.0f];
[shadow setShadowColor:[UIColor darkGrayColor]];
[shadow setShadowOffset:CGSizeMake(0, 2.0f)];
[attributedString addAttribute:NSShadowAttributeName value:shadow range:range];

[self setAttributedText:attributedString];
Run Code Online (Sandbox Code Playgroud)

它几乎没有引人注意,但一旦你看到它,它是显而易见的.有其他人遇到过这个bug并且有解决方法吗?

objective-c ios6

6
推荐指数
0
解决办法
2926
查看次数

人工智能库

我正在寻找在游戏中有用的人工智能算法的C和C++实现.我最感兴趣的一些是强化学习算法,遗传算法和神经网络.然而,任何其他人都很有趣.

我发现dlib.net它有一些非常迷人的机器学习算法,但这些似乎并不特别适合游戏.


我可以使用的许可证是Boost软件许可证,Zlib/Libpng许可证和公共域.任何属于这些许可证的图书馆的任何建议都将受到高度赞赏.

c++ algorithm artificial-intelligence machine-learning game-ai

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

没有SDL的Emscripten

我正在尝试开始使用emscripten,但我似乎无法找到有关它的所有信息.我已经按照教程,得到了一个简单的hello world工作.从我收集的内容中,正常的GL调用会被自动转换为WebGL,但我想知道的是如何设置渲染目标,上下文以及所有那些没有SDLGLUT沿着这些行的任何东西.

有没有办法WebGL在emscripten 上使用SDL\GLUT(包括鼠标/键盘输入等)?我在哪里可以获得有关emscripten的更多信息,示例等?

c++ sdl opengl-es webgl emscripten

6
推荐指数
1
解决办法
1958
查看次数

在创建共享库时让ld忽略未定义的引用

我想获得gccld来自编译一堆对象文件放在一起时共享库忽略未解决的参考-fpic标志.

到目前为止,我尝试了很多选项(为了简洁起见,用一些小文件代替了许多目标文件的长文件名):

ld --allow-shlib-undefined --unresolved-symbols=ignore-all -shared 1.o 2.o -o lib0.so
ld -G 1.o 2.o -o lib0.so
Run Code Online (Sandbox Code Playgroud)

(我的某处是红色的,-G可以提供未解决的引用,但是没有运气.)

虽然gcc(带-Wl,--unresolved-symbols=ignore-all)运行它会导致更少的未解析引用,因为它默认链接

-lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
Run Code Online (Sandbox Code Playgroud)

但它仍然抱怨没有-lopengl32-lgdi32.

编译lib没有-fpic,将所有目标文件存储在.awith ar和静态链接中,同时具有exe程序链接-lopengl32-lgdi32导致完全正常工作.

实际的错误消息(为简洁起见,替换了长文件和函数名称):

[file].o: In function `[function]': [file].cpp:19: undefined reference to `memcpy'
[file].o: In function …
Run Code Online (Sandbox Code Playgroud)

linker gcc mingw ld

5
推荐指数
1
解决办法
6812
查看次数

嵌入luajit未定义的引用

我试图将(静态)luajit嵌入到c ++应用程序中失败了.我已经按照luajit网站上的步骤无效,用Google搜索主题并没有获得相关信息,并尝试了我能想到的每件事.

好像我正在运行的问题似乎是g ++没有正确地链接它,或者也许luajit没有正确构建.

这是我正在尝试编译的内容:

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

int main(void)
{
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    lua_close(L);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的undefined reference错误是一个错误,几乎就像我根本没有链接luajit.

main.cpp:7: undefined reference to `luaL_newstate()'
main.cpp:9: undefined reference to `luaL_openlibs(lua_State*)'
main.cpp:10: undefined reference to `lua_close(lua_State*)'
Run Code Online (Sandbox Code Playgroud)

在设置链接选项后,我正在尝试用eclipse cdt(mingw)编译它,如下所示:

Library Paths:        D:/includes/LuaJIT-2.0.1/src
Includes (GNU G++):   D:/includes/LuaJIT-2.0.1/src
Libraries:            luajit
Run Code Online (Sandbox Code Playgroud)

而eclipse cdt似乎正在尝试编译它如下:

g++ -ID:/includes/LuaJIT-2.0.1/src -O0 -g3 -pedantic-errors -Wall -Wextra -Werror -Wconversion -c -fmessage-length=0 -Weffc++ -std=c++11 -o "source\\main.o" "..\\source\\main.cpp" 
g++ -LD:/includes/LuaJIT-2.0.1/src -o test.exe "source\\main.o" -lluajit
Run Code Online (Sandbox Code Playgroud)

我从他们的下载页面下载了 …

c++ windows lua makefile luajit

3
推荐指数
1
解决办法
1891
查看次数

如何比较c ++中的2个日期

我有一个包含日期yyyy/mm/dd格式的字符串变量.如何time_t在C++中将其转换为类型?例如:string date_details = "2012/09/12"

另外,如何比较包含日期的两个变量来决定哪个是C++中最早的?例如:string curr_date = "2012/09/13" string user_date = "2012/09/12"

谢谢.

c++ date

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