小编rut*_*ike的帖子

如何链接(或解决)两个定义相同符号的第三方静态库?

我不可能是唯一遇到这种情况的人.

我有一个C++应用程序需要链接到SDK中的一个第三方和另一个静态库集.出于某些令人沮丧的原因,SDK将相同的第三方库的子集重新编译为它们自己的(重命名的)lib,尽管这些符号本身的名称相同,并且它们未封装在命名空间中.我的应用程序本身依赖于相同的第三方库.

我考虑了一些选择,但也许我错过了一些东西,希望新面貌能帮到我.也许我很亲密,有人会知道其中一个的下一步.到目前为止,我将列举我尝试过的内容以及每个解决方案的缺点:

  1. 与两者联系.我得到大约2500行符号重新定义/大小更改警告和错误.这是我第一次发现他们定义了相同的符号.我正在尝试用g ++重新编译OpenSSL并将其放入命名空间...请参阅下面的编辑...

  2. 仅与SDK链接.我得到了我自己的代码所依赖的未定义符号 - 这是我发现他们重新编译第三方库是一个子集,或者至少配置了一个模块被禁用.

  3. 仅与第三方lib链接.我在SDK上报告了一些未定义的符号 - 其中一个实际上是第三方库中头文件中的#define,因此第三方lib中的所有引用都解析为定义,但外部引用却没有.我把它移到c文件中,这解决了这个问题,但是我仍然有两个我在任何地方都找不到的未解决的函数.这是我到目前为止最接近的.

  4. 从两个lib和链接中删除冲突的符号.到目前为止,这还没有奏效.它可能是SDK中静态链接的lib与我尝试使用第三方库的版本之间的版本问题,但看起来某些函数在符号之间移动,因此通过删除符号,我无意中删除了我在其他地方需要的功能.SDK中的符号中的函数与第三方lib中的符号中的函数之间似乎没有完美的映射.剥离功能而不必手动调整地址是否合理?

我一直在用libs检查符号:

nm -C --defined-only lib<name>.a
Run Code Online (Sandbox Code Playgroud)

并提取整个对象:

ar -x lib<name>.a <objname>.o
Run Code Online (Sandbox Code Playgroud)

希望这也将帮助那些不得不与彼此冲突的第三方库链接的其他人.为了具体细节,第三方lib是OpenSSL,SDK是Opsec - libcpopenssl.a是Opsec中令人讨厌的lib.

**编辑 - 可能的后期入口解决方法可能是使用g ++重新编译OpenSSL并将整个内容放在命名空间中,然后链接两个库.我现在正在尝试......更多来......

c c++ linker openssl static-libraries

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

为什么/ bin/kill的有效信号与kill不同?

我试图写一个快速的bash脚本,该脚本检测在一定条件下对信号的程序,并且通过习惯势力我使用的完整路径,一些斌utils的,即/bin/rm/bin/kill代替rmkill.随着kill特别,不过,我注意到在有效的信号,我可以送一个区别,这是困惑我:

[root@linux]# which kill
/bin/kill

[root@linux]# /bin/kill -l
HUP INT QUIT ILL ABRT FPE KILL SEGV PIPE ALRM TERM USR1 USR2 CHLD CONT
STOP TSTP TTIN TTOU TRAP IOT BUS SYS STKFLT URG IO POLL CLD XCPU XFSZ
VTALRM PROF PWR WINCH UNUSED

[root@linux]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2 …
Run Code Online (Sandbox Code Playgroud)

bash signals kill

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

Devenv ProjectConfig开关 - Win32和x64

以交互方式运行Visual Studio 2008,我可以为x64和Win32目标成功构建项目.但是,如果我调用devenv,无论我的/ projectconfig参数如何,它总是执行x64构建:

devenv /Rebuild Release MySolution.sln /projectconfig "Release|Win32"

Microsoft (R) Visual Studio Version 9.0.21022.8.
Copyright (C) Microsoft Corp. All rights reserved.
------ Rebuild All started: Project: my-project, Configuration: Release x64 ------
Run Code Online (Sandbox Code Playgroud)

请注意/ projectconfig arg与Configuration:输出不匹配.我错过了一些简单的事吗?它在IDE中工作正常,但有一堆目标,我更喜欢编写脚本.

提前致谢!

visual-studio-2008 visual-studio

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