小编ser*_*atg的帖子

g++ 同时链接静态和非静态库

我有一个 makefile 项目,其中包含几个不同的库。其中之一是我静态链接的 boost 库,以使我的程序可移植。这是我的 makefile 命令的样子:

g++ -O0 -g test.cpp testObject.o -pthread -I/home/user/devel/lmx-sdk-4.7.1/include/ -L/home/user/devel/lmx-sdk-4.7.1/linux_x64 -llmxclient -lrt -ldl -lboost_filesystem  -lboost_system -static -static-libgcc -o $@
Run Code Online (Sandbox Code Playgroud)

我还将 lmx-sdk 库链接到我的项目以使用许可功能;然而,似乎 lmx-sdk 似乎不喜欢静态链接,因为它给出了一个错误“在静态链接的应用程序中使用‘dlopen’需要在运行时使用 glibc 版本中用于链接的共享库”。

我怎样才能静态链接一些库和动态链接其他库?

提前致谢

PS我检查了一些类似的主题并尝试了一些对我不起作用的方法。

c++ makefile g++ dynamic-linking static-linking

6
推荐指数
1
解决办法
2418
查看次数

使用<<运算符写入文件和cout

我想重载<<运算符来写一个文件和cout所需的值.我试图使用以下代码来完成它,但无法成功.它只是将值写入文本文件.任何帮助,将不胜感激.谢谢.

void operator<<(std::ostream& os, const string& str)
{
    std::cout << str;
    os << str;
}

int main() {
    ofstream fl;
    fl.open("test.txt");
    fl << "!!!Hello World!!!" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ cout file operator-overloading

5
推荐指数
1
解决办法
6441
查看次数

C++ 程序的单个实例,使用 boost::interprocess

我有一个控制台应用程序,我试图让它一次只运行一次。我使用了 boost 进程间库 shared_memory_object 来做到这一点。请参阅下面的代码片段,

  boost::scoped_ptr<shared_memory_object> sharedMem;

  try
  {
     sharedMem.reset(
       new shared_memory_object(create_only, "shared_memory", read_write));
  } catch(...)
  {
     // executable is already running
      cerr << "Another instance of this program is running!" << endl;
      return 1;
  }

  // do something

  shared_memory_object::remove("shared_memory");  // remove the shared memory before exiting the application
Run Code Online (Sandbox Code Playgroud)

问题是,该方法阻止我的应用程序同时运行多次;但是,假设用户停止程序运行,那么内存不会被释放,下次当用户再次尝试运行该程序时,它不会运行。你有什么建议吗 ?

PS C++ 控制台应用程序,操作系统:Ubuntu(但也可以在其他平台上运行的解决方案将是完美的)。谢谢

c++ linux boost single-instance interprocess

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