小编Joh*_*oma的帖子

将 Cygwin 应用程序作为 Windows 服务运行

我正在研究 WinDRBD ( https://github.com/LINBIT/windrbd ) 一个 Linux DRBD 驱动程序到 Microsoft Windows 的端口。

我们希望将用户模式帮助程序作为 Windows 服务运行(DRBD 有时使用 call_usermodehelper() 调用用户空间应用程序,我们通过从内核驱动程序检索这些请求的守护进程进行模拟,运行它们并将退出状态返回给内核) .

当我们在 cygwin shell 中运行守护进程时,一切正常。但是,当将守护程序作为 Windows 服务运行时,cygwin 似乎找不到它的安装目录(在我的机器上是 C:\cygwin64)。

注册表项 (HKLM/Software/CygWin/setup/rootdir) 指向正确的位置,但我不确定 Windows 服务是否也可以访问它?

该服务未找到 /bin/sh,但是 /cygdrive/c/cygwin64/bin/sh 存在,因此当我使用该路径运行 shell 时,它可以启动(并且还可以找到运行所需的 DLL)。然而,shell 抱怨:

bash.exe:警告:找不到/tmp,请创建!

以正常方式运行 cygwin 时肯定存在。

有没有人试过将 CygWin 编译的 EXE 作为 Windows 服务运行?这是 sc 查询 windrbdum 的输出:

SERVICE_NAME: windrbdum 
    TYPE               : 10  WIN32_OWN_PROCESS  
    STATE              : 4  RUNNING 
                            (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT …
Run Code Online (Sandbox Code Playgroud)

windows registry service cygwin posix

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

链接C++库时的未定义引用

我编写了一个C++库,当链接到库时,无法找到符号.这是我得到的:

a.cpp:

void zak()
{
}
Run Code Online (Sandbox Code Playgroud)

TEST.CPP:

extern void zak();

int main(int argc, const char ** argv)
{
    zak();
}
Run Code Online (Sandbox Code Playgroud)

Makefile文件:

all:
    g++ -c -o a.o a.cpp
    ar r libzak.a a.o
    g++ -L. -lzak test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

这是我的(Linux Mint 13)框中的内容:

g++ -c -o a.o a.cpp
ar r libzak.a a.o
g++ -L. -lzak test.cpp -o test
/tmp/ccC4cnLV.o: In function `main':
test.cpp:(.text+0x7): undefined reference to `zak()'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

我确信我错过了一些明显的东西,但它是什么?

c++ linker static

2
推荐指数
1
解决办法
124
查看次数

标签 统计

c++ ×1

cygwin ×1

linker ×1

posix ×1

registry ×1

service ×1

static ×1

windows ×1