Questions tagged «portability»

可移植代码几乎可以在多个环境中运行而无需修改。可通过例如USB驱动器运行便携式应用程序,而无需修改计算机环境。

1
SO_REUSEADDR和SO_REUSEPORT有何区别?
在man pages和套接字选项程序员单证SO_REUSEADDR,并SO_REUSEPORT针对不同的操作系统,不同的,往往混淆高度。有些操作系统甚至没有该选项SO_REUSEPORT。WEB充满了与此主题相关的信息,通常您会发现仅对于特定操作系统的一个套接字实现才是正确的信息,甚至在本文中也没有明确提及。 那么到底有什么SO_REUSEADDR不同SO_REUSEPORT呢? 系统没有SO_REUSEPORT更多限制吗? 如果我在不同的操作系统上使用任一操作系统,预期的行为到底是什么?

12
有没有一种可移植的方法来获取Python中的当前用户名?
有没有一种可移植的方式来获取Python中当前用户的用户名(即,至少在Linux和Windows下都可以使用的用户名)。它会像这样工作os.getuid: >>> os.getuid() 42 >>> os.getusername() 'slartibartfast' 我四处搜寻,很惊讶地没有找到一个明确的答案(尽管也许我只是在谷歌搜索方面很差)。该PWD模块提供了一个相对简单的方法来实现这一目标下,说,Linux的,但它不存在于Windows。一些搜索结果表明,在某些情况下(例如,作为Windows服务运行),在Windows下获取用户名可能会很复杂,尽管我尚未对此进行验证。

8
为什么要快速运行glibc的复杂性太复杂?
我在这里浏览strlen代码,想知道是否确实需要代码中使用的优化?例如,为什么下面这样的东西不能同样好或更好? unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } 较简单的代码对编译器进行优化是否更好或更容易? strlen链接后面页面上的代码如下所示: /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn Granlund (tege@sics.se), with …


9
Windows(Visual C)是否可以替代unistd.h?
我正在将一个为Unix编写的相对简单的控制台程序移植到Windows平台(Visual C ++ 8.0)。所有源文件都包含“ unistd.h”,该文件不存在。删除它,我会抱怨缺少“ srandom”,“ random”和“ getopt”的原型。我知道我可以替换随机函数,而且我很确定自己可以找到/破解一个getopt实现。 但是我敢肯定,其他人也会遇到同样的挑战。我的问题是:Windows是否有“ unistd.h”端口?至少有一个包含本机Windows实现的功能-我不需要管道或分支。 编辑: 我知道我可以创建自己的“ unistd.h”,其中包含我需要的东西的替代品-特别是在这种情况下,因为这是一个有限的集合。但是由于这似乎是一个常见问题,所以我想知道是否有人已经为更大的功能子集完成了工作。 在工作中无法切换到其他编译器或环境-我对Visual Studio感到困惑。
165 c++  c  windows  portability  unistd.h 



23
什么是教育工具能够证明人们在C / C ++中所做的不必要的假设?
我想为SO准备一些教育工具,该工具应帮助初学者(和中级)程序员认识和挑战C,C ++及其平台中的不必要假设。 例子: “整数环绕” “每个人都有ASCII” “我可以将函数指针存储在void *中” 我认为一个小的测试程序可以在各种平台上运行,这些平台运行“合理”的假设,这些假设是根据我们在SO方面的经验,通常由许多没有经验/半经验的主流开发人员做出的,并记录了它们在不同机器上的破坏方式。 这样做的目的不是要证明做某事是“安全的”(这是不可能做到的,测试如果失败就只能证明任何事情),而是向即使是最不懂事的人也演示最不起眼的表情如果其他计算机具有未定义或实现定义的行为,则在另一台计算机上中断。。 为此,我想问你: 如何改善这个想法? 哪些测试将是好的,它们应该是什么样? 您是否可以在可以使用的平台上运行测试并发布结果,以便最终获得平台数据库,它们之间的差异以及为何允许这种差异? 这是测试玩具的当前版本: #include <stdio.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> int count=0; int total=0; void expect(const char *info, const char *expr) { printf("..%s\n but '%s' is false.\n",info,expr); fflush(stdout); count++; } #define EXPECT(INFO,EXPR) if (total++,!(EXPR)) expect(INFO,#EXPR) /* stack check..How …

8
CMAKE中特定于操作系统的说明:如何?
我是CMAKE的初学者。下面是一个简单的cmake文件,在mingw环境窗口中效果很好。问题显然与target_link_libraries()我链接libwsock32.a的CMAKE函数有关。在Windows中,这行得通,我得到结果。 但是,正如预期的那样,在Linux中,/usr/bin/ld将查找-lwsock32Linux OS上没有的遗嘱。 我的问题是:如何指示CMAKE避免在Linux OS中链接wsock32库??? 任何帮助将不胜感激。 我的简单CMake文件: PROJECT(biourl) set (${PROJECT_NAME}_headers ./BioSocketAddress.h ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h ./BioSocketListener.h ./BioSocketPrivate.h ./BioSocketStream.h ./BioUrl.h BioDatabase.h ) set (${PROJECT_NAME}_sources BioSocketAddress.C BioSocketBase.C BioSocketCommon.C BioSocketStream.C BioUrl.C BioDatabase.C ) add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} ) # linkers #find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH) target_link_libraries(${PROJECT_NAME} bioutils wsock32) install (TARGETS ${PROJECT_NAME} RUNTIME …
109 c++  linux  cmake  mingw  portability 

9
如何在某些平台上可移植地调用一个采用char **且在其他平台上采用const char **的C ++函数?
在我的Linux(和OS X)计算机上,该iconv()函数具有以下原型: size_t iconv (iconv_t, char **inbuf... 在FreeBSD上,它看起来像这样: size_t iconv (iconv_t, const char **inbuf... 我希望我的C ++代码可以在两个平台上构建。对于C编译器,传递char**for const char**参数(反之亦然)通常仅发出警告;反之亦然。但是在C ++中,这是一个致命错误。因此,如果传递a char**,它将无法在BSD上进行编译,如果传递a const char**,则将无法在Linux / OS X上进行编译。如何在不借助检测平台的情况下编写可在两者上进行编译的代码? 我的一个(失败)想法是提供一个本地原型,该原型将覆盖标头提供的任何原型: void myfunc(void) { size_t iconv (iconv_t, char **inbuf); iconv(foo, ptr); } 这失败,因为iconv需要C链接,并且您不能放入extern "C"函数中(为什么不这样?) 我想出的最佳工作思路是强制转换函数指针本身: typedef void (*func_t)(iconv_t, const char **); ((func_t)(iconv))(foo, ptr); 但这有可能掩盖其他更严重的错误。
91 c++  const  portability 

4
现代C ++的实验功能对长期项目是否可靠?
我有一个当前使用C ++ 11/14的项目,但是它需要类似的东西std::filesystem,它仅在C ++ 17中可用,因此我目前没有机会使用它。但是,我看到它在我当前的编译器中可用std::experimental::filesystem。使用实验性功能是否是一个好主意,假设我将来可以添加以下内容: #ifdef CXX17 //if this is C++17 std::filesystem::something ...; #else std::experimental::filesystem::something ...; #endif 我担心的是: 1.是否保证所有兼容的编译器都具有相同的实验功能? 2.实验功能是否容易发生重大变化而使其不可靠? 也许还有更多事情想知道。为什么我应该或不应该使用它们?我为一个新项目感到困惑,不知道该怎么决定。

6
如何将JRE与Launch4j捆绑在一起?
我的计算机上装有Launch4J,它是一个很棒的程序。我感兴趣的功能之一是能够将JRE捆绑在常规.EXE文件中。但是,我找不到任何描述如何执行此操作的文档。 如何将JRE与EXE捆绑在一起?另外,在哪里可以运行紧凑的便携式JRE?Oracle上的下载链接适用于安装程序包。

17
Django:“ current_tags”不是有效的标签库
我有一个从朋友那里收到的Django小项目。该代码可以在他的系统上完美运行。但是,在我的系统上,运行服务器时收到以下错误消息: /的TemplateSyntaxError 'current_tags'不是有效的标签库:找不到模板库current_tags,尝试过django.templatetags.current_tags 问题出在html文件中的一行: {% load current_tags %} 此完全相同的代码可在他的系统上正常工作,没有错误。那会是什么呢?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.