Articles of 共享

如何链接在Linux共享库与其他共享库?

我的应用程序dynamic加载liba.so (与dlopen )。 liba.so使用libb.so因此我想将liba.so链接liba.so libb.so 如何在Linux中做到这一点? 提前致谢。

如何在Linux中由两个不同的进程调用共享库文件?

在Linux中,我有一个名为foo.so的共享库文件当我执行2个不同的进程p1,p2,它们都使用foo.so. 这个foo.so是否被这两个过程重叠?

如何列出连接到Linux共享内存段的进程?

如何确定哪个进程连接到共享内存段? awagner@tree:/home/awagner$ ipcs -m —— Shared Memory Segments ——– key shmid owner perms bytes nattch status 0x00000000 0 root 777 102400 1 0x00000000 32769 root 774 96 1 dest 0x00000000 98306 awagner 600 393216 2 dest 0x00000000 131075 awagner 600 393216 2 dest 即我如何确定哪两个进程连接到shmid 98306?

Linux共享库使用共享库的未定义符号

两个共享库liba.so和libb.so. liba.so使用libb.so. 所有的c文件都是用-fPIC编译的。 链接使用共享。 当我们在liba.so上调用dlopen时,它在libb.so中找不到符号…我们得到“未定义符号”错误。 我们可以直接liblo.so没有错误。 我们知道liba正在查找libb,因为我们没有find文件未find的错误。 当我们删除libb.so时,我们得到一个没有find文件的错误。 我们试过了 – 没有运气。 有任何想法吗???? 哦耶。 gcc 4.1.2 更新:在链接liba时使用rpath,因此可以findlibb。 ldd liba.so返回: linux-gate.so.1 => (0xffffe000) libb.so => ./libb.so (0xf6ef9000) <——– LIBB libutil.so.1 => /lib/libutil.so.1 (0xf6ef5000) libdl.so.2 => /lib/libdl.so.2 (0xf6ef1000) libm.so.6 => /lib/libm.so.6 (0xf6ec9000) libpthread.so.0 => /lib/libpthread.so.0 (0xf6eb1000) librt.so.1 => /lib/librt.so.1 (0xf6ea8000) libc.so.6 => /lib/libc.so.6 (0xf6d62000) /lib/ld-linux.so.2 (0x007d0000) 是否有意义的是没有。#在libb的末尾?

ld:在共享库中使用-rpath,$ ORIGIN(recursion)

我刚刚提供了一个在$ORIGIN中使用ld的-rpath选项的基本示例(请参阅第二个响应中的工作版本)。 我试图创build一个例子,其中main.run链接到foo.so ,链接到bar.so ,所有使用rpath和$ORIGIN 。 运行时文件结构是: 项目/ LIB / DIR / 子/ bar.so foo.so 跑/ main.run (未能build立) 我正在build设foo.so使用: g++ -c -o obj/foo.o src/foo.cpp -fPIC g++ -shared -o lib/dir/foo.so obj/foo.o -Wl,-soname,foo.so -Wl,-rpath,'$ORIGIN/sub' -Llib/dir/sub -l:bar.so 哪些build立好。 ldd lib/dir/foo.so甚至可以findbar.so 但是,当我尝试将main.run链接到foo.so , foo.so找不到bar.so. 我正在build设main.so使用: g++ -c -o obj/main.o src/main.cpp g++ -o run/main.run obj/main.o -Wl,-rpath,'$ORIGIN/../lib/dir' -Llib/dir -l:foo.so 这工作正常,如果使用另一个版本的foo.so不recursion链接。 (在make.sh中取消注释行,在下面的项目中进行testing)。 然而,使用正常的foo.so我得到这个错误时,build设main.run […]

在两个进程(C,Windows)之间共享内存

由于我没有find一个问题的答案在这里以前问我在尝试一种不同的方法。 有什么办法可以在两个进程之间共享内存? 第二个进程从注入获取信息,因为这是一个传统程序,它不再被支持。 我的想法是在那里注入一些代码,在我传递给注入的程序的结构中,将地址(或其他)传递给共享内存,我需要运行的数据位于该共享内存中。 一旦我得到的数据,我将在注入的线程中填充我自己的variables。 这可能吗? 怎么样? 代码表示赞赏。 编辑: 我认为这不清楚,所以我会澄清。 我知道如何注入。 我已经在做了。 这里的问题是将dynamic数据传递给注入。

在Windows和Silverlight类库之间共享C#代码

我们编写了一个小的Windows类库,为一些标准types(string最初)实现了扩展方法。 我把它放在一个库中,以便我们的任何项目都可以通过简单地引用它并添加使用XXX.Extensions来使用它。 当我们想在Silverlight中使用这些方法时出现了一个问题。 尽pipe所有的代码都是兼容的,但Silverlight中不能引用Windows库,所以我们创build了一个Silverlight库,它链接到相同的类文件,并将编译器指令放入类中,以允许使用不同的声明和名称空间。 这工作得很好,直到今天,当我添加一个新的类到Windows扩展库,并意识到我将不得不记得将类连接到Silverlight库。 这是不理想的,我想知道是否有人有更好的方式共享Windows和Silverlight项目之间的扩展方法和其他帮助代码的想法。

Windows文件共享:为什么有时新创build的文件在一段时间内不可见?

我们面对非常奇怪的问题,使我们疯了。 有时我们的文件共享PC上新创build的文件在一段时间内“缺席”。 重现一个问题,你至less应该有两台电脑,称之为alpha和beta 。 在beta PC上创build文件共享( \\beta\share\bug )并从alpha PC运行这个PowerShell脚本: param( $sharePath="\\beta\share\bug" ) $sharePC = ($sharePath -split '\\')[2] $session = New-PSSession -ComputerName $sharePC $counter = 0 while ($true) { $fileName = $sharePath + "\$counter.txt" Invoke-Command -Session $session -ScriptBlock { param( $fileName ) "" > $fileName } -ArgumentList $fileName if (Test-Path $fileName) { Write-Host "File $fileName exists" […]

有一个相当于-rpath连接器标志的Windows / MSVC?

在Linux / GCC上,我可以使用-rpath标志来更改共享库的可执行文件searchpath,而不用使用环境variables。 这也可以在Windows上完成吗? 据我所知,dll总是在可执行文件的目录和PATH中search。 我的场景:我想根据它们的属性(32 / 64bit / Debug / Release)将共享库放入位置,而不必考虑唯一的名称。 在Linux上,这很容易通过rpath完成,但我还没有find任何方式在Windows上做这个。 感谢任何提示!

如何访问Windows共享上的git回购?

我希望能够将工作回购从我的Windows 7桌面同步到Windows 7笔记本电脑,而无需将我的提交推送到我们的主服务器。 我该怎么做呢? 我无法弄清楚如何设置一个远程path,以便git能够理解它在哪里。 我通常使用Git Bash来处理git,而不是windows命令行,所以这里的问题可能是我无法弄清楚如何在Git Bash中引用一个windows共享的path。 所以,说我有一个回购(Windows共享path): \\\\MyWorkPCName\dev\myrepo\ 而在命令行中,我可以访问目录和文件(尽pipe使用pushd,因为cmd是愚蠢的),我如何将其转换为有效的git远程?