我昨天从 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")