这个问题与dlopen静态库linux C ++中的动态库密切相关,但存在进一步的复杂性(并使用C ++代替C):
我有一个链接到静态库(.a)的应用程序,该库使用dlopen函数加载动态库(.so)。另外,动态库调用在静态库中定义的函数。
有没有一种方法可以在不将动态库与静态库链接的情况下进行编译,反之亦然?
这是到目前为止我尝试过的内容,对相关问题的示例进行了一些修改:
app.cpp:
#include "staticlib.hpp"
#include <iostream>
int main()
{
std::cout << "and the magic number is: " << doSomethingDynamicish() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
staticlib.hpp:
#ifndef __STATICLIB_H__
#define __STATICLIB_H__
int doSomethingDynamicish();
int doSomethingBoring();
#endif
Run Code Online (Sandbox Code Playgroud)
staticlib.cpp:
#include "staticlib.hpp"
#include "dlfcn.h"
#include <iostream>
int doSomethingDynamicish()
{
void* handle = dlopen("./libdynlib.so",RTLD_NOW);
if(!handle)
{
std::cout << "could not dlopen: " << dlerror() << std::endl;
return 0;
}
typedef int(*dynamicfnc)();
dynamicfnc func = (dynamicfnc)dlsym(handle,"GetMeANumber");
const char* err …Run Code Online (Sandbox Code Playgroud) 有没有办法让 MPI 只打印一个(或一个子集)进程的输出?我知道如何在代码级别上做到这一点,但我想知道在可执行文件已经被编译后是否有某种方法可以指定这一点。我正在考虑在以下命令中的窗口之一中获取输出
mpirun -np [#processes] xterm -e [path to executable]
Run Code Online (Sandbox Code Playgroud)
只是不使用xterm。
我知道我可以使用 -tag-output 选项标记输出,然后可以手动过滤它,但这有点乏味。由于 MPI 确切地知道输出来自哪里,有没有更简单的方法来实现这个目标?