我试图静态链接Android NDK的libfreeimage.a的开放框架构建(使用native-activity示例作为模板).
当我编译和链接我的项目时,我得到了很多链接器错误:
../../../lib/ndk/armeabi-v7a/libfreeimage.a(ImfTimeCodeAttribute.o): In function global constructors keyed to ImfTimeCodeAttribute.cpp':
ImfTimeCodeAttribute.cpp:(.text+0x28): undefined reference tostd::ios_base::Init::Init()'
我相信这是一个范围问题,可以通过在代码中添加命名空间或在gcc上使用g ++来解决.我认为-lstdc ++会解决问题,但事实并非如此.
任何帮助将不胜感激.
Android.mk:
LOCAL_PATH := $(call my-dir)/tmp
include $(CLEAR_VARS)
LOCAL_MODULE := androidapp
LOCAL_CFLAGS := -DFREEIMAGE_LIB\
-DANDROID_NDK \
-DDISABLE_IMPORTGL \
-mfpu=vfp -mfloat-abi=softfp \
-ffast-math -O3 -DFPM_ARM
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM -lstdc++ -ldl
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_LDLIBS += ../../../lib/ndk/armeabi-v7a/libfreeimage.a
LOCAL_ARM_MODE := arm
SRC-FILES := $(wildcard tmp/*.c*)
SRC-FILES := $(SRC-FILES:tmp/%=%)
LOCAL_SRC_FILES += $(SRC-FILES)
APP_OPTIM := release
APP_ABI := armeabi-v7a
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
我正在尝试构建一个VC++项目,我得到这些LINK错误:
2>MyProject_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer2_Release@4
2>MyProject_p.obj : error LNK2001: unresolved external symbol _NdrStubForwardingFunction@16
2>MyProject_p.obj : error LNK2001: unresolved external symbol _IUnknown_Release_Proxy@4
2>MyProject_p.obj : error LNK2001: unresolved external symbol _IUnknown_AddRef_Proxy@4
2>MyProject_p.obj : error LNK2001: unresolved external symbol _IUnknown_QueryInterface_Proxy@12
2>MyProject_p.obj : error LNK2001: unresolved external symbol _NdrOleFree@4
2>MyProject_p.obj : error LNK2001: unresolved external symbol _NdrOleAllocate@4
Run Code Online (Sandbox Code Playgroud)
这是一个庞大的项目,有很多依赖项目 - 我已经在解决方案中添加了它们,并且它们都构建得很好.
我已经在上述实体的整个解决方案中进行了搜索,例如'CStdStubBuffer2'没有结果.我确实在MyProject_p.obj中找到了它们以及其他不可读的项目,但我不知道该怎么做.我看了类似的问题,但找不到任何可以帮助我的东西.有人能告诉我在哪里可以解决这个问题吗?谢谢.
仅在链接优化的目标文件时,而不是在链接未优化的目标文件时,我才会收到未定义的引用链接器错误。我不明白问题是什么或可能是什么。
这是我未优化的构建:
构建文件:../COMPASS.cpp 调用:GCC C++ 编译器 g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"COMPASS.d" -MT"COMPASS.d" -o"COMPASS.o" “../COMPASS.cpp” 完成的建筑:../COMPASS.cpp 构建文件:../PSA.cpp 调用:GCC C++ 编译器 g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"PSA.d" -MT"PSA.d" -o"PSA.o" “../PSA.cpp” 完成的建筑:../PSA.cpp 构建文件:../SAR.cpp 调用:GCC C++ 编译器 g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"SAR.d" -MT"SAR.d" -o"SAR.o" “../SAR.cpp” 完成的建筑:../SAR.cpp 构建文件:../constraints.cpp 调用:GCC C++ 编译器 g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp …
我从http://www.arcsynthesis.org/gltut/下载了教程(0.3.8),然后根据说明我使用premake4.exe来购买visual studio 2010项目(premake4 vs2010)并且它工作正常,但是当我尝试运行一些例子,我得到错误信息
指定的文件是无法识别或不支持的二进制格式

你能告诉我为什么吗?
我正在尝试使用 Boost::Test 为该库创建一个 C 库和一个 C++ 测试程序。我在这个问题中发布的代码是我的代码的简化,它显示了完全相同的问题。请帮忙!
这是目录结构。 childlib是我正在尝试创建的库,并且test是测试程序。
> tree
.
`-- src
|-- main
| |-- c
| | `-- childlib.c
| |-- childlib.h
| `-- makefile
`-- test
|-- cpp
| `-- test.cpp
`-- makefile
5 directories, 5 files
Run Code Online (Sandbox Code Playgroud)
我可以childlib成功地制作成一个静态库:
> cd src/main
> make
gcc -c -fPIC -o c/childlib.o c/childlib.c
ar rcs libchildlib.a c/childlib.o
ranlib libchildlib.a
Run Code Online (Sandbox Code Playgroud)
但是我无法通过链接来制作我的测试程序:
> cd ../test/
> make
g++ -I. -I../main -Imy_boost_install_dir/include -c -std=c++11 -o cpp/test.o cpp/test.cpp …Run Code Online (Sandbox Code Playgroud) 我正在尝试在项目中使用 LibUSB。但是,每当我尝试使用基本的 libUSB 函数时,都会出现以下错误:
...src/main/main.cpp.o: In function `main':
...src/main/main.cpp:10: undefined reference to `libusb_init'
...src/main/main.cpp:11: undefined reference to `libusb_set_debug'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
安装了 LibUSB-devel 包(我在 Fedora 22 上)并且我的 IDE KDevelop 找到并识别标头,一旦您添加了 import 语句,它就会提供 LibUSB 代码完成。我的 IDE 或 CMake(我的构建系统)中没有任何自定义包含行,所以我想知道我需要做什么才能让 CMake 找到 LibUSB 标头。
这是 的内容main.cpp,以防万一我搞砸了:
#include <iostream>
#include <libusb-1.0/libusb.h>
int main(int argc, char **argv) {
libusb_init(NULL);
libusb_set_debug(NULL, LIBUSB_LOG_LEVEL_WARNING);
/*snip*/
std::cout << "Hello, world! PTPID=" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是CMakeLists.txt:
../
cmake_minimum_required(VERSION 2.8.11)
set(CMAKE_CXX_FLAGS …Run Code Online (Sandbox Code Playgroud) 在将 libpng 静态库添加到我的项目以与 pngwriter 一起使用后,我收到此错误“'p2'中无法识别的标志'-FitObjData'”。我该如何解决这个错误,它告诉我什么?我正在用 VC10 编译。
我试图了解为什么undefined reference在链接过程中出现错误:
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib -T/home/amirgon/projects/esp8266/esp-open-sdk/sdk/ld/eagle.app.v6.cpp.ld -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lmain build/app_app.a -Wl,--end-group -o build/app.out
build/app_app.a(routines.o):(.text+0x4): undefined reference to `pvPortMalloc(unsigned int, char const*, int)'
Run Code Online (Sandbox Code Playgroud)
gcc 抱怨它找不到函数pvPortMalloc。
但是,我可以确认此功能存在于libmain.a!
在上面的命令行中,libmain 被引用-lmain并且库路径设置为-L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib. 当我从libmain.a该路径转储符号时,我可以找到pvPortMalloc标记为T,这意味着该符号位于文本(代码)部分:
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-nm -g /home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib/libmain.a | grep pvPortMalloc
U pvPortMalloc
0000014c T pvPortMalloc
U pvPortMalloc
Run Code Online (Sandbox Code Playgroud)
那么,我错过了什么吗?尽管函数存在于 libmain.a 中,但 gcc 找不到该函数的原因可能是什么?
如何进一步调试此错误?
我有以下几点docker-compose.yml:
version: '2'
services:
server:
build: .
command: ["./setup/wait-for-postgres.sh", "tide_server::5432", "cd /app", "npm install", "npm run start"]
ports:
- 3030:3030
links:
- database
depends_on:
- database
database:
image: postgres
environment:
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=postgres"
- "POSTGRES_DB=tide_server"
ports:
- 5432:5432
Run Code Online (Sandbox Code Playgroud)
我尝试遵循本教程并使用以下 shell 脚本来确定何时postgres准备就绪。
#!/bin/bash
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until psql -h "$host" -U "postgres" -c '\l'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up …Run Code Online (Sandbox Code Playgroud) 我有简单的程序,它使用Core.Std模块中的函数,例如:
open Core.Std
let _ = List.last [1;2;3]
Run Code Online (Sandbox Code Playgroud)
我可以通过ocamlfind或编译和链接它ocamlbuild:
ocamlfind ocamlc -package core -linkpkg -thread app.ml
ocamlbuild -use-ocamlfind -pkgs core -tag thread app.native
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用"普通"OCaml编译器编译和链接此类文件:
ocamlc -c -I ~/.opam/system/lib/core_kernel/ -I ~/.opam/system/lib/core/ app.ml
ocamlc ~/.opam/system/lib/core_kernel/core_kernel.cma ~/.opam/system/lib/core/core.cma app.cmo
Run Code Online (Sandbox Code Playgroud)
上述命令的最后一行给出以下错误:
File "_none_", line 1:
Error: Error on dynamically loaded library: /home/maciej/.opam/system/lib/stublibs/dllcore_kernel_stubs.so: /home/maciej/.opam/system/lib/stublibs/dllcore_kernel_stubs.so: undefined symbol: caml_ba_alloc
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
linker-errors ×10
c++ ×5
linker ×2
android ×1
android-ndk ×1
c ×1
cmake ×1
docker ×1
dockerfile ×1
elf ×1
freeimage ×1
gcc ×1
makefile ×1
ocaml ×1
ocaml-core ×1
opengl ×1
postgresql ×1