相关疑难解决方法(0)

在Windows和Linux上进行C++编译:ifdef switch

我想在Linux和Windows上运行一些c ++代码.有些代码我只希望包含在一个操作系统中,而不包含在另一个操作系统中.是否有标准的#ifdef可以使用?

就像是:

  #ifdef LINUX_KEY_WORD
    ... // linux code goes here.
  #elif WINDOWS_KEY_WORD
    ... // windows code goes here.
  #else 
  #error "OS not supported!"
  #endif
Run Code Online (Sandbox Code Playgroud)

问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案.

c++ linux windows conditional-compilation ifdefine

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

在C++中确定32对64位

我正在寻找一种方法可靠地确定C++代码是在32位还是64位编译.我们已经提出了我们认为使用宏的合理解决方案,但很想知道人们是否可以想到这可能会失败的情况,或者是否有更好的方法来做到这一点.请注意,我们正在尝试在跨平台的多编译器环境中执行此操作.

#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif

#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ conditional-compilation 32bit-64bit

127
推荐指数
8
解决办法
11万
查看次数

检测CPU架构编译时

在编译C或C++代码时,找出CPU架构最可靠的方法是什么?据我所知,不同的编译器有自己的一套非标准预处理器定义(_M_X86在MSVS中__i386__,__arm__在GCC 中等).

有没有一种标准的方法来检测我正在构建的架构?如果没有,是否有各种编译器的这种定义的综合列表的来源,例如包含所有样板#ifdef的标题?

c c++ cpu-architecture detection compile-time

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

如何使用linux amd64,cmake和g ++交叉编译linux x86?

每条信息都有+1,有助于完成整个画面.你不需要知道整个答案.我会同样欣赏这个拼图的各个部分.谢谢.

我即将尝试我的第一次交叉编译.我搜索了SO和网络,发现了许多信息,但我并不总是知道如何将这些部分放在一起,因为仍然有一些缺失的部分.

我的主持人:linux Kubuntu amd64.
目标:linux kubuntu x86(32位)(应该很简单,不是吗?)
工具:g ++和cmake.

这是我发现的信息:

如何使用gcc/cmake在64位Linux机器上编译32位二进制文​​件
提到导出CFLAGS = -m32.这是一件作品.

跨平台:选择使用32/64位的
数据类型提及数据类型.我可能必须在我的代码中注意这一点.

#ifdef用于32位平台
#ifdef用于32位平台
链接到以下内容,虽然我还不太清楚如何使用它:http:
//predef.sourceforge.net/prearch.html

http://ww.ubuntuforums.org/showthread.php?t=1377396
我做了:sudo apt-get install g ++ - multilib

缺件:

理想情况下,当我'make'(使用cmake)时,它应该吐出amd64二进制文件和x86二进制文件.

我的CMakeLists.txt的一部分如下所示:

add_definitions(-Wall -pthread)
add_executable (../run.amd64 user.cpp time.cpp init.cpp utils.cpp main.cpp)
target_link_libraries(../run.amd64 cppcms dbixx config++ ctemplate)
Run Code Online (Sandbox Code Playgroud)

如何引入标志-m32来创建第二个可执行文件?

我是否只想制作一个可执行文件(例如,用于测试和调试),如何告诉cmake创建一个或两个二进制文件?

此外,您可以看到我使用了一些第三方库,其中一些我必须自己编译.这是否意味着我还需要为目标主机编译每个二进制文件?有些人使用cmake,有些人使用:./ configure; 使;
如何为目标主机编译这些库(要使用的标志等)?

注意:动态链接库已经编译并安装在目标计算机上,所以也许我不需要担心这一步......我不确定:这是我遗失的部分之一......

我需要的是一种教程,或至少一些缺失的部分.我将更新这篇文章,详细介绍我取得的成就以及如何实现.

谢谢.

PS

有可能吗?

搜索更多,我发现了这个:
http://www.mail-archive.com/cmake@cmake.org/msg26265.html
"原始设计似乎不是为了windows-linux或linux-windows而设计的交叉编译."
cmake没有测试linux amd64到linux x86.

http://www.cmake.org/Wiki/CMake_Cross_Compiling#FAQ.2FPotential_Problems
"在混合的32/64位Linux安装中,交叉编译不能仅用于构建32/64位."

??

linux g++ cmake cross-compiling

26
推荐指数
4
解决办法
3万
查看次数

有没有一种标准方法可以在编译时确定系统是32位还是64位?

我需要设置 #ifdef - 检查条件编译.我想自动化该过程但不能指定目标OS /机器.有没有一种方法可以解析预编译器是在32位还是64位上运行?

(解释)我需要定义一个64位大小的类型.在64位操作系统上它是一个很长的,在大多数情况下它是一个很长的.

我找到了这个答案 - 这是正确的方法吗?

[编辑] 编译器宏方便参考

c++ compilation 32bit-64bit

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