🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

43638閲覧

リンカエラーLNK2001が解決できません。ヒントを……ヒントを!!

mrpepper

総合スコア55

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/11/25 02:30

編集2016/11/25 02:31

Visual Studio Express 2012 + GLPK 4.6 for windowsで、

error LNK2001: 外部シンボル "_glp_version" は未解決です。

が出ます。ソースコードを末尾に示しましたが、解決法を教えて頂ければ幸いです。

#自力でやった問題の切り分け

###1 マングリングの問題ではなさそうです
エラーからもソースコードからも分かるとおり、C++でCの関数を呼ぶための作法は守られています。

###2 ライブラリパスの問題ではなさそうです
glpk_4_60.libを例えばglpk_4_60dummy.libに変えると

error LNK1104: ファイル 'glpk_4_60dummy.lib' を開くことができません。

というエラーに変わります。また、同名のファイルがシステム上に存在しないことも確認済です。

###3 ライブラリの中身も壊れていないようです
「VS2012開発者コマンドプロンプト」上で下記のコマンドを実行しました。

cmd

1> dumpbin /exports glpk_4_60.lib 2 3File Type: LIBRARY 4 5 Exports 6 7 ordinal name 8 9 glp_add_arc 10 glp_add_cols 11 glp_add_rows 12 glp_add_vertices 13 glp_adv_basis 14 glp_alloc 15 glp_analyze_bound 16 glp_analyze_coef 17 glp_asnprob_hall 18 glp_asnprob_lp 19 glp_asnprob_okalg 20 glp_assert_ 21 glp_at_error 22 glp_bf_exists 23 glp_bf_updated 24 glp_btran 25 glp_check_asnprob 26 glp_check_cnfsat 27 glp_check_dup 28 glp_check_kkt 29 glp_close_tee 30 glp_copy_prob 31 glp_cpp 32 glp_cpx_basis 33 glp_create_graph 34 glp_create_index 35 glp_create_prob 36 glp_create_v_index 37 glp_del_arc 38 glp_del_cols 39 glp_del_rows 40 glp_del_vertices 41 glp_delete_graph 42 glp_delete_index 43 glp_delete_prob 44 glp_delete_v_index 45 glp_difftime 46 glp_dual_rtest 47 glp_erase_graph 48 glp_erase_prob 49 glp_error_ 50 glp_error_hook 51 glp_eval_tab_col 52 glp_eval_tab_row 53 glp_exact 54 glp_factorize 55 glp_find_col 56 glp_find_row 57 glp_find_vertex 58 glp_free 59 glp_free_env 60 glp_ftran 61 glp_get_bfcp 62 glp_get_bhead 63 glp_get_col_bind 64 glp_get_col_dual 65 glp_get_col_kind 66 glp_get_col_lb 67 glp_get_col_name 68 glp_get_col_prim 69 glp_get_col_stat 70 glp_get_col_type 71 glp_get_col_ub 72 glp_get_dual_stat 73 glp_get_it_cnt 74 glp_get_mat_col 75 glp_get_mat_row 76 glp_get_num_bin 77 glp_get_num_cols 78 glp_get_num_int 79 glp_get_num_nz 80 glp_get_num_rows 81 glp_get_obj_coef 82 glp_get_obj_dir 83 glp_get_obj_name 84 glp_get_obj_val 85 glp_get_prim_stat 86 glp_get_prob_name 87 glp_get_rii 88 glp_get_row_bind 89 glp_get_row_dual 90 glp_get_row_lb 91 glp_get_row_name 92 glp_get_row_prim 93 glp_get_row_stat 94 glp_get_row_type 95 glp_get_row_ub 96 glp_get_sjj 97 glp_get_status 98 glp_get_unbnd_ray 99 glp_gridgen 100 glp_init_cpxcp 101 glp_init_env 102 glp_init_iocp 103 glp_init_iptcp 104 glp_init_mpscp 105 glp_init_smcp 106 glp_interior 107 glp_intfeas1 108 glp_intopt 109 glp_ios_add_row 110 glp_ios_best_node 111 glp_ios_branch_upon 112 glp_ios_can_branch 113 glp_ios_clear_pool 114 glp_ios_curr_node 115 glp_ios_del_row 116 glp_ios_get_prob 117 glp_ios_heur_sol 118 glp_ios_mip_gap 119 glp_ios_next_node 120 glp_ios_node_bound 121 glp_ios_node_data 122 glp_ios_node_level 123 glp_ios_pool_size 124 glp_ios_prev_node 125 glp_ios_reason 126 glp_ios_row_attr 127 glp_ios_select_node 128 glp_ios_terminate 129 glp_ios_tree_size 130 glp_ios_up_node 131 glp_ipt_col_dual 132 glp_ipt_col_prim 133 glp_ipt_obj_val 134 glp_ipt_row_dual 135 glp_ipt_row_prim 136 glp_ipt_status 137 glp_load_matrix 138 glp_maxflow_ffalg 139 glp_maxflow_lp 140 glp_mem_limit 141 glp_mem_usage 142 glp_mincost_lp 143 glp_mincost_okalg 144 glp_mincost_relax4 145 glp_minisat1 146 glp_mip_col_val 147 glp_mip_obj_val 148 glp_mip_row_val 149 glp_mip_status 150 glp_mpl_alloc_wksp 151 glp_mpl_build_prob 152 glp_mpl_free_wksp 153 glp_mpl_generate 154 glp_mpl_init_rand 155 glp_mpl_postsolve 156 glp_mpl_read_data 157 glp_mpl_read_model 158 glp_netgen 159 glp_netgen_prob 160 glp_open_tee 161 glp_prim_rtest 162 glp_print_ipt 163 glp_print_mip 164 glp_print_ranges 165 glp_print_sol 166 glp_printf 167 glp_puts 168 glp_read_asnprob 169 glp_read_ccdata 170 glp_read_cnfsat 171 glp_read_graph 172 glp_read_ipt 173 glp_read_lp 174 glp_read_maxflow 175 glp_read_mincost 176 glp_read_mip 177 glp_read_mps 178 glp_read_prob 179 glp_read_sol 180 glp_realloc 181 glp_rmfgen 182 glp_scale_prob 183 glp_set_bfcp 184 glp_set_col_bnds 185 glp_set_col_kind 186 glp_set_col_name 187 glp_set_col_stat 188 glp_set_graph_name 189 glp_set_it_cnt 190 glp_set_mat_col 191 glp_set_mat_row 192 glp_set_obj_coef 193 glp_set_obj_dir 194 glp_set_obj_name 195 glp_set_prob_name 196 glp_set_rii 197 glp_set_row_bnds 198 glp_set_row_name 199 glp_set_row_stat 200 glp_set_sjj 201 glp_set_vertex_name 202 glp_simplex 203 glp_sort_matrix 204 glp_std_basis 205 glp_strong_comp 206 glp_term_hook 207 glp_term_out 208 glp_time 209 glp_top_sort 210 glp_transform_col 211 glp_transform_row 212 glp_unscale_prob 213 glp_version 214 glp_vprintf 215 glp_warm_up 216 glp_wclique_exact 217 glp_weak_comp 218 glp_write_asnprob 219 glp_write_ccdata 220 glp_write_cnfsat 221 glp_write_graph 222 glp_write_ipt 223 glp_write_lp 224 glp_write_maxflow 225 glp_write_mincost 226 glp_write_mip 227 glp_write_mps 228 glp_write_prob 229 glp_write_sol 230 231 Summary 232 233 C9 .debug$S 234 14 .idata$2 235 14 .idata$3 236 8 .idata$4 237 8 .idata$5 238 E .idata$6

#何か初歩的な盲点がありそうな気はしているのですが、困ってしまっています
どなたか、ヒントでも構いませんので、よろしくお願いいたします。
ソースコードは下記の通りです。

Cpp

1#include <stdio.h> 2#include <tchar.h> 3#include <iostream> 4#include <Windows.h> 5extern "C"{ 6#include "glpk.h" 7} 8#pragma comment(lib, "glpk_4_60.lib") 9 10int _tmain(int argc, _TCHAR* argv[]) 11{ 12 std::cout << glp_version() << std::endl; 13 system("pause"); 14 return 0; 15}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2016/11/25 05:11

"glpk_4_60.lib"は誰がビルドしたものでしょう?
mrpepper

2016/11/28 00:14

yahhoyさん、GLPK fpr Windowsの一部として配布されていたものです。
guest

回答4

0

こんにちは。

実際に遭遇したことはないのですが、指定しているライブラリ・バスがdll用のもので、インクルードする際にdllである旨を指定していない場合、関数名が異なる(dllは_imp__で始まります)のでそのようなエラーが出るかもしれません。

投稿2016/11/25 03:19

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mrpepper

2016/11/27 14:27

その通りのようです。 元々の公式から落としてきたアーカイブに入っているのはDLL用のライブラリのようで、 スタティックライブラリをビルドし直したら上手く行きました。 ありがとうございます。
mrpepper

2016/11/28 00:20

Teratail上の資料として遺すべきなのは「真因」だと思いましたので、問題回避のきっかけとなったこちらのメッセージではなく、別の方にベストアンサー付け直しました。
Chironian

2016/11/28 00:29

この内容なら、正しい方にBAを付けるべきですね。了解です。
guest

0

ベストアンサー

ターゲットx86なのにx64ライブラリ参照していると思われます。

以下、VS2010コマンドプロンプト(x86とx64)で確認。

x86

Setting environment for using Microsoft Visual Studio 2010 x86 tools. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>cd C:\Users\hoge\Desktop\glpk-4.60 C:\Users\hoge\Desktop\glpk-4.60>cl -EHsc -Isrc trial.cpp -link -libpath:w64 Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. trial.cpp Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:trial.exe -libpath:w64 trial.obj trial.obj : error LNK2019: 未解決の外部シンボル _glp_version が関数 _main で参照されました。 trial.exe : fatal error LNK1120: 外部参照 1 が未解決です。 C:\Users\hoge\Desktop\glpk-4.60>cl -EHsc -Isrc trial.cpp -link -libpath:w32 Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. trial.cpp Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:trial.exe -libpath:w32 trial.obj

x64

Setting environment for using Microsoft Visual Studio 2010 x64 tools. c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>cd C:\Users\hoge\Desktop\glpk-4.60 C:\Users\hoge\Desktop\glpk-4.60>cl -EHsc -Isrc trial.cpp -link -libpath:w64 Microsoft(R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64 Copyright (C) Microsoft Corporation. All rights reserved. trial.cpp Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:trial.exe -libpath:w64 trial.obj C:\Users\hoge\Desktop\glpk-4.60>cl -EHsc -Isrc trial.cpp -link -libpath:w32 Microsoft(R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64 Copyright (C) Microsoft Corporation. All rights reserved. trial.cpp Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:trial.exe -libpath:w32 trial.obj trial.obj : error LNK2019: 未解決の外部シンボル glp_version が関数 main で参照されました。 trial.exe : fatal error LNK1120: 外部参照 1 が未解決です。

投稿2016/11/25 04:53

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mrpepper

2016/11/28 00:18

途中まで読んで、「問題回避」の引き金となった別回答にベストアンサー付けてしまった後ですが、現象としては、こちらが「真因」です。「本当に起きていたこと」はこちらだと思います。
mrpepper

2016/11/28 00:22

ベストアンサーをこちらに付け直しました。そこそこ珍しいと思いますが、もし同様の問題に直面している方がいたら、こちらをまず参照して頂くことをオススメします。
guest

0

VisualStudio2015Communityにて動作確認しました
やったこととしては
64bitモードで
インクルードフォルダの設定
リンカ→全般から追加のライブラリディレクトリの設定(w64フォルダ)
リンカ→入力から追加の依存ファイルにglpk_4_60.libを追加

たぶんリンクがうまくいってないのかと

投稿2016/11/25 04:28

iwanote

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

winglpk-4.60.zipをdownloadし、glpk-4.60\w64 で buildして
示されたコードを trial.cpp として glpk-4.60 に置き...

E:\work\winglpk-4.60\glpk-4.60>cl -EHsc -Isrc trial.cpp -link -libpath:w64 Microsoft(R) C/C++ Optimizing Compiler Version 19.00.23506 for x64 Copyright (C) Microsoft Corporation. All rights reserved. trial.cpp Microsoft (R) Incremental Linker Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:trial.exe -libpath:w64 trial.obj E:\work\winglpk-4.60\glpk-4.60>

何の問題もありませんねぇ...ライブラリ・パスの不備としか考えられないっす。

投稿2016/11/25 02:55

編集2016/11/25 02:58
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問