我有一个 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我检查了一些类似的主题并尝试了一些对我不起作用的方法。
我想重载<<运算符来写一个文件和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) 我有一个控制台应用程序,我试图让它一次只运行一次。我使用了 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(但也可以在其他平台上运行的解决方案将是完美的)。谢谢