问题标签 [shared-libraries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1188 浏览

.net - 将共享程序集安装到 GAC 中以进行开发和构建

我在这里阅读了一些关于 GAC 的帖子,以及为什么永远不应该通过将共享程序集安装到 GAC 中来部署应用程序。我认为这是有道理的,因为它应该使更新客户端计算机上的应用程序更容易。

但是,我可以看到 GAC 在两个方面很有用,即在开发期间和在构建服务器上。

例如,如果您使用 Microsoft 应用程序块,您可以将它们安装到 GAC 中并在那里引用它们。这是有道理的,因为这样做比拥有和绝对引用路径更容易,并且每个开发人员机器上的路径可能不同。这也比拥有一个包含所有共享组件的共享网络驱动器要好 - 已经做到了。

然后,您可能会对构建服务器执行相同的操作。但是,我看到的唯一问题是您有一个使用 2.0 版应用程序块的应用程序。稍后您将其升级为使用 3.1 版。在某些时候,您可能需要重新创建该应用程序的早期版本来测试客户发现的错误,但是当您重新创建构建时,它将选择应用程序块的 3.1 版本,而不是最初构建时所针对的 2.0 版本。这是真的,还是旧项目文件仍然会引用旧版本的 dll,只要它在 GAC 中?

你对这个特定点有什么想法/意见?

我希望能够将所有版本的共享组件(我们下载或构建)作为 MSI 分发给所有开发人员,这些 MSI 安装到 GAC 中,并作为应用程序安装程序的一部分部署到客户机器上。这是最好的方法吗?

0 投票
2 回答
2465 浏览

c++ - 共享库中的静态类成员

我有一个像

我想创建一个包含此类的共享库 (dll) K。在我调用的库中编译的 cpp 文件中

实例化静态变量。dll 确实编译没有错误,但是当我使用该库时,我得到了成员的未解决的外部符号错误K::aK::b. 在我想使用它的主程序中,我在 class 的声明中包含相同的头文件K,唯一的区别是我使用的库 class __declspec( dllexport ) K { ... } 和主程序class K { ... }

可能我犯了不止一个错误,所以我的问题是,我怎么能

  • 告诉链接器共享库中的静态成员类?
  • 在主程序中使用库中实例化的静态类成员?

PS。我使用 Visual Studio 2008...

0 投票
2 回答
4526 浏览

c++ - GCC如何从静态库中导出函数

我想在 OS X 下使用 GCC 从几个静态库创建一个共享库。

在一些静态库中,共享库中没有代码调用它,我只想导出这些静态库中的符号。这在调试模式下有效,但在发布模式下无效(尤其是当我启用死代码条带化时)。我可以理解原因,gcc 认为静态库上的这些函数从未使用过。但是我怎样才能强制 gcc 包含这些符号?

我已经尝试为加载程序添加 -u 选项,但它只生成一个“本地”符号。如何使链接器生成导出符号?

另外,我想知道是否有办法在源代码中添加链接器指令,就像 MSVC#pragrma comment(linker, "/INCLUDE:xxxx")

我在静态库中定义的函数是这样的:

提前致谢!-强尼

0 投票
5 回答
16002 浏览

c# - DLL 中的单例类可以跨进程共享吗?

我正在创建一个自定义的.net 硬件框架,其他程序员将使用它来控制某些硬件。他们将添加对我们的 DLL 的引用以访问我们的硬件框架。我需要一个可以从多个应用程序(进程)访问的共享类。

单例模式似乎是我需要的,但它只适用于进程中的多个线程。我可能完全错了,但这是我目前拥有的 C# 代码示例。我不禁觉得设计不正确。我希望我可以分享更具体的信息,但我不能。

  • 我必须强调,我无法控制客户应用程序。解决方案必须包含在框架 (DLL) 本身内。

框架:(共享 DLL)

测试应用程序:(最终是客户应用程序)

第一个启动的应用程序提供以下输出:

按回车键获取资源!

1:2009 年 6 月 24 日上午 8 点 27 分 34 秒

3:2009 年 6 月 24 日上午 8 点 27 分 34 秒

按回车关闭进程!

第二个应用程序提供以下输出:

按回车键获取资源!

9:2009 年 6 月 24 日上午 8 点 27 分 35 秒

10:2009 年 6 月 24 日上午 8 点 27 分 35 秒

按回车关闭进程!

结论

我希望看到两个应用程序都返回相同的类的第一次实例化时间的字符串。

如您所见,单例适用于进程内的多个线程,但不适用于跨进程。也许这无法完成,因为我似乎找不到任何解决方案。

0 投票
1 回答
122 浏览

firefox - 计划为 Firefox 制作 SO 指标

问题:当您在 Not-SO 站点时,通过 Firefox 底部栏中的 SO 指示器显示 Not-SO 页面已在 SO 中讨论

扩展应该如何工作?

如果非 SO 页面位于 SO,它应该显示一个彩色 SO 指示器。

我假设我们不能使用

  • 谷歌(因为插件显然违反了它的服务条款)
  • SO 没有与以下 Google 搜索类似的搜索

我们不允许使用的谷歌搜索

是否有任何可以查看 Not-SO 页面是否已在其他地方讨论过?

0 投票
1 回答
1197 浏览

python - 同一个库的两个版本可以在同一个 Python 安装中共存吗?

C 库有一种很好的后期绑定形式,其中记录了链接期间使用的库的确切版本,因此可执行文件可以找到正确的文件,即使安装了同一个库的多个版本。

可以在 Python 中完成相同的操作吗?

更具体地说,我在一个 Python 项目中工作,该项目使用了一些 3rd-party 库,例如 paramiko。Paramiko 现在是 1.7.4 版本,但一些发行版带有它的旧版本,同时提供大约相同版本的 Python 解释器。

自然,我想支持尽可能多的配置,而不仅仅是最新的发行版。但是,如果我从旧发行版提供的版本升级 paramiko 的已安装版本,我 1) 使包管理器的生活变得艰难 2) 由于库版本不兼容,可能会破坏一些现有的应用程序,并且 3) 如果包管理器可能会损坏决定覆盖我的自定义安装。

是否有可能在 Python 中干净地解决这个问题?(即,我将如何进行设置,以及代码应该是什么样的)。理想情况下,它只会在 site_libraries 中安装几个版本的库并让我的脚本选择正确的版本,而不是使用一组手动安装的库来维护一个私有目录。

PS:我可以将 Python 程序编译为二进制文件,并附带所有必要的依赖项,但这有点违背使用发行版提供的解释器的想法。我在 Windows 上做。

0 投票
3 回答
4253 浏览

sharepoint - 在 SharePoint 中创建自定义文档库

我的 SharePoint 页面中有一个文档库,其中有 10 个文档。

如果用户 A 已登录,我希望他只能看到该文档库中的 5 个文档。

如何创建一些自定义文档库以使其正常工作?

我已经安装了MOSS。

提前致谢!

0 投票
1 回答
235 浏览

c++ - 打开共享对象时出错:SunGrid Engine

我的应用程序通过作为共享对象 libdrmaa.so 的 API DRMAA 使用 Sun N1 网格引擎。
我正在使用 dlopen 和 dlsym 来访问库的功能。这很好用。现在,如果我尝试从命令行链接它,可执行文件已构建但执行它会给出错误“无法打开共享对象文件”。
任何人都可以提出可能是什么原因。
我正在使用 g++ 2.95.3 进行编译,机器是 linux x86_64。

谢谢

0 投票
5 回答
19635 浏览

c++ - C++ 中 dlsym() 和 dlopen() 的替代方案

我有一个应用程序,其中一部分使用共享库。这些库在编译时链接。
在运行时,加载程序期望共享对象在 中LD_LIBRARY_PATH,如果没有找到整个应用程序崩溃并出现错误“无法加载共享库”。请注意,不能保证客户端将拥有该库,在这种情况下我想要应用程序留下合适的错误消息,独立部分也应该正常工作。

为此,我正在使用dlsym()dlopen()使用共享库中的 API。这样做的问题是,如果我在 API 中有很多函数,我必须单独使用dlsym()和 ptrs 访问它们,这在我的情况下会导致内存损坏和代码崩溃。

有没有其他选择?

0 投票
3 回答
461 浏览

c++ - 使用 C 动态加载例程的问题

我有一个由用 C++ 编写的不同模块组成的应用程序。
其中一个模块用于处理 SunGrid Engine 上的分布式任务。它使用 DRMAA API 来提交和监控网格作业。如果客户端不支持网格,则应使用本地计算机

API libdrmaa.so 的共享对象在编译时链接并在运行时加载。
如果使用我的应用程序的客户端有这个“.so”一切都很好,但如果客户端没有那个,应用程序退出加载共享库失败。
为了避免这种情况,我将 API 调用替换为使用 dlsym() 和 dlopen() 获得的函数指针。现在,如果对 dlopen 的调用没有成功并且我的目标已经实现,我可以使用本地计算机而不是网格。
现在的问题是应用程序现在可以成功运行小型测试用例,但是对于较大的测试用例,它会引发分段错误,而使用动态加载的相同代码可以正常工作。

使用 dlsym() 和 dlopen() 时我是否遗漏了什么?
有没有其他方法可以实现相同的目标?

任何帮助,将不胜感激。

谢谢,