我正在使用 QUrl 构建字符串 url。假设我需要获取“rtsp://camera.lan/stream”网址。
下面的代码给出了“rtsp://camera.lan”url:
QUrl url;
url.setScheme("rtsp");
url.setHost("camera.lan");
auto url_str = url.toString().toStdString(); // "rtsp://camera.lan"
Run Code Online (Sandbox Code Playgroud)
这给出了“rtsp:camera.lan”网址:
url.setScheme("rtsp");
url.setPath("camera.lan");
auto url_str = url.toString().toStdString(); // "rtsp:camera.lan"
Run Code Online (Sandbox Code Playgroud)
但如果我设置主机路径,则它无效:
url.setScheme("rtsp");
url.setHost("camera.lan");
url.setPath("stream");
auto url_str = url.toString().toStdString(); // gives ""
bool url_is_valid = url.isValid(); // false
Run Code Online (Sandbox Code Playgroud)
文档说,
对于非分层方案,路径将是方案声明之后的所有内容
但是如果我需要指定路径和权限怎么办?
我想动态链接共享库并从中分配一个函数std::function.这是代码:
function.cpp:
#include <array>
#ifdef __cplusplus
extern "C" {
#endif
double function(std::array<double, 1> arg)
{
return arg[0] * 2;
}
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#include <functional>
#include <iostream>
#include <fstream>
#include <array>
#include <functional>
#ifdef __linux__
#include <dlfcn.h>
#endif
int main()
{
void *handle;
double (*function)(std::array<double, 1>);
char *error;
handle = dlopen("/home/oleg/MyProjects/shared_library_test/libFunction.so", RTLD_LAZY);
if (!handle)
{
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
dlerror();
*(void **) (&function) = dlsym(handle, "function");
if ((error = dlerror()) != NULL)
{
fprintf(stderr, "%s\n", …Run Code Online (Sandbox Code Playgroud)