libc 的奇怪问题:对“crypt”的未定义引用

libc 的奇怪问题:对“crypt”的未定义引用

我昨天从 Archlinux 转移到 Kubuntu 12.04。

我在 Archlinux 上编译了 buildroot 2012.08,没有任何问题。但在 Kubuntu 上libcrypt似乎有问题。sysvinit在任何地方都找不到它。glibc-dev并且所有依赖项都已安装。

我如何链接到libcrypt?或者,哪个包包含该库?

...
bc-gcc   sulogin.o    -o sulogin
sulogin.o: In function `main':
sulogin.c:(.text+0x49d): undefined reference to `crypt'
collect2: ld returned 1 exit status

答案1

尝试在链接中使用的任何对象后添加“-lcrypt”;我遇到过几个例子,如果 -lcrypt 不在链接列表的末尾,gcc 就会抱怨 crypt。

换句话说,尝试以下方法:

gcc -D FOO -D BAR -W -Wall -pedantic -O2 foo.o bar.o -lnsl -lcrypt -o baz

而不是

gcc -D FOO -D BAR -W -Wall -pedantic -O2 -lnsl -lcrypt foo.o baz.o -o baz

答案2

对“crypt”未定义的引用是链接器错误。

尝试使用 -lcrypt 链接:gcc ....-lcrypt

答案3

对于像我一样使用超级自动魔法 CMAKE 的人,请尝试添加

target_link_libraries(your_binary_name PRIVATE libcrypt.so)

你的CMakeLists.txt

或者,根据需要用 PUBLIC 替换 PRIVATE。


如果你有明确的库路径(例如,所有需要的库都在 /usr/lib 中),那么只需声明即可CMakeLists.txt

set(CMAKE_CXX_FLAGS "-lcrypt")

相关内容