程序设计

专业和发烧友程序员的问答

4
共享库(.so),静态库(.a)和DLL(.so)之间的区别?
我参与了有关Linux库的一些辩论,并想确认一些事情。 根据我的理解(如果我做错了,请纠正我,稍后我将编辑我的文章)在构建应用程序时有两种使用库的方法: 静态库(.a文件):在链接时,会将整个库的副本放入最终应用程序中,以便调用方应用程序始终可以使用库中的功能 共享对象(.so文件):在链接时,仅通过相应的标头(.h)文件针对其API对对象进行了验证。该库直到需要运行时才真正使用。 静态库的明显优点是它们允许整个应用程序独立运行,而动态库的优点是可以替换“ .so”文件(即:由于安全原因需要更新)错误),而无需重新编译基本应用程序。 我听说有人对共享库和动态链接库(DLL)进行了区分,即使它们都是“ .so”文件。在Linux或任何其他POSIX兼容操作系统(即MINIX,UNIX,QNX等)上进行C / C ++开发时,共享库和DLL之间是否有区别?有人告诉我(到目前为止)一个关键的区别是共享对象仅在运行时使用,而DLL的共享必须首先在应用程序中使用dlopen()调用来打开。 最后,我还听到一些开发人员提到“共享档案”,据我了解,共享档案本身也是静态库,但从未被应用程序直接使用。相反,其他静态库将链接到“共享档案”,以将某些(但不是全部)功能/资源从共享档案中拉到正在构建的静态库中。 预先感谢大家的帮助。 更新资料 在向我提供这些术语的上下文中,必须学习Linux的一组Windows开发人员实际上使用了错误的术语。我试图纠正它们,但是(不正确的)语言规范卡住了。 共享库:程序启动时自动链接到程序的库,并且作为独立文件存在。该库在编译时包含在链接列表中(即:LDOPTS+=-lmylib对于名为的库文件mylib.so)。该库必须在编译时以及应用程序启动时存在。 静态库:一个在构建时就合并到实际程序本身的库,用于一个(较大)应用程序,其中包含应用程序代码和在构建程序时自动链接到程序中的库代码,而最终的二进制文件则同时包含这两个程序主程序和库本身作为单个独立的二进制文件存在。该库在编译时包含在链接列表中(即:LDOPTS+=-lmylib对于名为mylib.a的库文件)。该库必须在编译时存在。 DLL:本质上与共享库相同,但不是在编译时包含在链接列表中,而是通过dlopen()/ dlsym()命令加载该库,因此该库无需在构建时就存在,即可进行程序编译。同样,该库不需要在应用程序启动或编译时出现(必需),因为仅在进行dlopen/ dlsym调用时才需要。 共享存档:本质上与静态库相同,但是使用“导出共享”和“ -fPIC”标志进行编译。该库在编译时包含在链接列表中(即:LDOPTS+=-lmylibS对于名为的库文件mylibS.a)。两者之间的区别是,如果共享库或DLL希望将共享归档文件静态链接到其自己的代码,并且能够使共享库中的函数可用于其他程序,而不仅仅是使用它们,则需要使用此附加标志。 DLL内部。当有人为您提供静态库并且您希望将其重新打包为SO时,这很有用。该库必须在编译时存在。 附加更新 “ DLL”和“ shared library” 之间的区别只是我当时工作的公司中的一种(懒惰,不准确的)口语(Windows开发人员被迫转移到Linux开发,并且这个术语陷入了僵局),并遵循上述说明。 另外,在S“共享档案”的情况下,库名后的尾随“ ”文字只是该公司的惯例,而不是整个行业。
272 c++  c  linux  dll  linker 

12
IIS8上的WCF;* .svc处理程序映射不起作用
我正在尝试在2012年内部版本8400的IIS8中运行wcf服务。 在安装Web角色时,找不到像2008年那样的wcf东西(低于3.51)。 安装时,缺少svc处理程序映射,所以我做了一个: %windir%\Microsoft.NET\Framework\v3.0\WindowsCommunication Foundation\ServiceModelReg.exe –i 现在有处理程序映射,但是我仍然得到: The resource you are looking for does not have a handler associated with it. (我删除了静态文件处理程序。) 该站点正在使用经典管道以使用模拟。
272 asp.net  wcf  iis-8  iis-8.5 

11
雄辩的收藏:计数和检测空
这可能是一个琐碎的问题,但是我想知道Laravel是否建议某种方法来检查从其返回的Eloquent集合是否$result = Model::where(...)->get()为空,以及计算元素的数量。 我们目前正在使用!$result以检测空结果,是否足够?至于count($result),它实际上涵盖所有情况,包括空结果吗?


17
如何防止元素内的列中断?
考虑以下HTML: <div class='x'> <ul> <li>Number one</li> <li>Number two</li> <li>Number three</li> <li>Number four is a bit longer</li> <li>Number five</li> </ul> </div> 和以下CSS: .x { -moz-column-count: 3; column-count: 3; width: 30em; } 就目前而言,Firefox呈现的内容与以下类似: • Number one • Number three bit longer • Number two • Number four is a • Number five …



13
如何在C中定义枚举类型(枚举)?
我不确定使用C枚举的正确语法是什么。我有以下代码: enum {RANDOM, IMMEDIATE, SEARCH} strategy; strategy = IMMEDIATE; 但这无法编译,并出现以下错误: error: conflicting types for ‘strategy’ error: previous declaration of ‘strategy’ was here 我究竟做错了什么?
272 c  enums 

8
如何使用linq扩展方法执行左外部联接
假设我有一个这样的左外部联接: from f in Foo join b in Bar on f.Foo_Id equals b.Foo_Id into g from result in g.DefaultIfEmpty() select new { Foo = f, Bar = result } 如何使用扩展方法表达相同的任务?例如 Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ???) .Select(???)
272 c#  linq-to-sql  lambda 

23
Python成语返回第一项或无
我敢肯定,有一种更简单的方法可以做到这一点,而这只是我自己没有想到的。 我正在调用一堆返回列表的方法。该列表可能为空。如果列表是非空的,我想返回第一项。否则,我想返回无。此代码有效: my_list = get_list() if len(my_list) > 0: return my_list[0] return None 在我看来,这样做应该有一个简单的一句习惯用语,但是对于我的一生,我无法想到。在那儿? 编辑: 我在这里寻找单行表达式的原因并不是我喜欢令人难以置信的简洁代码,而是因为我不得不编写很多这样的代码: x = get_first_list() if x: # do something with x[0] # inevitably forget the [0] part, and have a bug to fix y = get_second_list() if y: # do something with y[0] # inevitably …




4
如何在PowerShell中取消条件?
如何在PowerShell中取消条件测试? 例如,如果要检查目录C:\ Code,则可以运行: if (Test-Path C:\Code){ write "it exists!" } 有否否定该条件的方法,例如(无效): if (Not (Test-Path C:\Code)){ write "it doesn't exist!" } 解决方法: if (Test-Path C:\Code){ } else { write "it doesn't exist" } 这工作正常,但我更喜欢内联。

5
如何检查失败的docker build的文件系统?
我正在尝试使用以下方法为我们的开发过程构建新的Docker映像 cpanm用于安装一堆Perl模块作为各种项目的基础映像。 开发Dockerfile时,cpanm返回失败代码,因为某些模块安装不干净。 我相当确定我需要apt安装更多东西。 我的问题是,在哪里可以找到/.cpanm/work输出中引用的目录,以便检查日志?在一般情况下,如何检查失败docker build命令的文件系统? 早上编辑咬住子弹并运行后,find我发现 /var/lib/docker/aufs/diff/3afa404e[...]/.cpanm 这可靠吗?还是我最好还是建造一个“裸”容器并手动运行东西,直到我拥有所需的一切为止?
272 debugging  docker  cpanm 

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.